【问题标题】:SQL group by date in MVC queryMVC查询中的SQL分组日期
【发布时间】:2016-01-04 18:31:48
【问题描述】:

我正在尝试在 mvc 上的数据库中进行查询,我想按订单日期计算购买 ID 和组。这是我的购买模式:

public class Purchase
{
    public int PurchaseID { get; set; }
    public int CustomerID { get; set; }

    public bool DeliveryChoice { get; set; }
    public int? DriverID { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    [Display(Name = "Order Date")]
}

这是我的查询:

SELECT  
    Purchase.PurchaseID, 
    Purchase.OrderDate,
    COUNT(*) 
From Purchase 
GROUP BY Purchase.OrderDate;

这是我执行它时得到的消息:

消息 8120,第 16 级,状态 1,第 1 行
选择列表中的“Purchase.PurchaseID”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

我将如何解决它以允许我按日期分组 (yyyy-MM-dd) 并计算购买 ID

【问题讨论】:

  • 从您的查询中删除Purchase.PurchaseID
  • 错误告诉你Purchase.PurchaseID不在group by子句中。
  • 它的 sql 比 mvc 多,所以运行查询 :-)

标签: sql sql-server


【解决方案1】:

如果你需要计算按日期分组的purchaseID,那么你需要这样的查询:

select 
    convert(nvarchar(10), Purchase.OrderDate, 112) as OrderDate,  
    count(Purchase.PurchaseID) 
from Purchase 
group by convert(nvarchar(10), Purchase.OrderDate, 112)

只需将Purchase.PurchaseID移动到聚合函数count的参数

您遇到了您提到的错误,因为当您对查询结果进行分组时 - 每个选定的值都应该是您分组依据的列,或者是某个聚合函数的结果 - 这正是在错误文本中说明。

【讨论】:

  • 如何让日期以 yyyy-MM-dd 格式显示,而不是 '2015-09-30 13:27:24.000' ?
  • @NneneTheresaUzoegbo 如果您只需要按日期部分分组(第一次看问题时错过了这一点),那么您应该去掉时间部分并按此值分组。比如说,应该是group by convert(nvarchar(10), Purchase.OrderDate, 112)。以这种格式显示日期应该由您已经使用的DisplayFormat 属性完成。
猜你喜欢
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
相关资源
最近更新 更多