Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中
我试图通过每年每个月获得订单数量,我发现有几个相关的函数非常有用 首先是datepart(M,OrderDate),datepart(Y,OrderDate),所以我编写代码如下:Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我试图通过每年每个月获得订单数量,我发现有几个相关的函数非常有用 首先是datepart(M,OrderDate),datepart(Y,OrderDate),所以我编写代码如下: select DATEPART(Q, OrderDate) Q , datepart(YEAR, OrderDate) Y, count(*) count from Orders group by DATEPART(Q, OrderDate), datepart(Y, OrderDate); select mo
select DATEPART(Q, OrderDate) Q , datepart(YEAR, OrderDate) Y, count(*) count
from Orders
group by DATEPART(Q, OrderDate), datepart(Y, OrderDate);
select month(OrderDate) M , year(OrderDate) y, count(*) count
from Orders
group by month(OrderDate),year(OrderDate);
但它有一个错误:
列“Orders.OrderDate”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中
然后,我尝试使用月(DateOrder)和年(DateOrder),代码如下:
select DATEPART(Q, OrderDate) Q , datepart(YEAR, OrderDate) Y, count(*) count
from Orders
group by DATEPART(Q, OrderDate), datepart(Y, OrderDate);
select month(OrderDate) M , year(OrderDate) y, count(*) count
from Orders
group by month(OrderDate),year(OrderDate);
上述代码的结果表明它是成功的
我的问题是为什么第一个代码有错误,而第二个代码是正确的?谢谢 因为在SELECT中,您使用了
datepart(YEAR,OrderDate)
搜索YEAR部分,而在group by中,您使用了datepart(Y,OrderDate)
-Y并不是年份的缩写,而是代表一年中的一天
年的缩写是YY
查询的工作原理如下:
select DATEPART(Q, OrderDate) Q , datepart(YEAR, OrderDate) Y, count(*) count
from Orders
group by DATEPART(Q, OrderDate), datepart(YY, OrderDate);
你可以在这张中看到-使用
YY
将给出2017年的今天,使用Y
将给出230-因为这是今年的第230天因为在选择中你使用了datepart(year,OrderDate)
搜索year部分,在分组中你有datepart(Y,OrderDate)
-Y不是年的缩写,而是一年中的某一天
年的缩写是YY
查询的工作原理如下:
select DATEPART(Q, OrderDate) Q , datepart(YEAR, OrderDate) Y, count(*) count
from Orders
group by DATEPART(Q, OrderDate), datepart(YY, OrderDate);
您可以在这张中看到-使用
YY
将给出2017年的今天,使用Y
将给出230-因为这是今年的第230天可能是一个混淆,因为Q
是SQL Server中的一个关键字。无论如何,您应该避免使用日期部分速记。可能会造成混淆,因为Q
是SQL Server中的一个关键字。无论如何,您应该避免使用日期部分速记。投了赞成票,但也请验证戈登的假设。可能有多个问题。@TimBiegeleisen测试,命名列Q
和/或在Datepart中使用Q
,没有问题,但也请测试Gordon的假设。可能有多个问题。@TimBiegeleisen已测试,命名列Q
和/或在Datepart中使用Q
不会有问题