2015-10-07 165 views
1

我想在我的数据库中查询mvc,我想通过订购日期来计算购买ID和组。这是我的购买模式:按MVC查询日期的SQL组

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,Line 1
列'Purchase.PurchaseID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我将如何解决这个问题,让我按日期(YYYY-MM-DD),如果你需要计算purchaseID按日期细分电子邮件算上purchaseid

+3

从查询中移除'Purchase.PurchaseID'? – Ric

+1

错误告诉你'Purchase.PurchaseID'不在'group by'子句中。 – markpsmith

+0

它的sql比mvc多,所以运行查询:-) – brykneval

回答

4

,那么你需要查询像这样的:

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

你得到错误的说法你所提到的,因为当你groupping QUER的结果y - 那么每个选定的值应该是您正在分组的一列或某个聚合函数的结果 - 这正是错误文本中所述的内容。

+0

我将如何得到日期以yyyy-MM-dd格式显示而不是'2015-09-30 13:27:24.000'? –

+0

@NneneTheresaUzoegbo如果你只需要根据日期部分进行分组(在第一次看时在你的问题中错过了这一点),那么你应该通过这个值去掉时间部分和分组。比如,它应该是'convert by convert(nvarchar(10),Purchase.OrderDate,112)'。以这种格式显示日期应该由您已经使用过的'DisplayFormat'属性完成。 –