我正在microsoft sql server 2016上使用tsql
我想创建一个sql,它按雇员、按年份和月份(过去36个月)分组提供pic的计数
所以这是我首先尝试的:
select
count(emp) AS NumberOfPics,
emp AS employee,
LEFT(picdatum,4) AS YearPic,
(Select Top 36 left(dbo.f376.picdatum,6))
FROM Storage
GROUP BY emp, LEFT(picdatum,4), LEFT(picdatum,6)
由于我的sql,它工作得很好
但是约会的结果不是很好。
所以我做了第二个。
select top 10
CONVERT (datetime,convert(char(8),picdatum)),
DATEPART(YYYY,CONVERT (datetime,convert(char(8),picdatum))) AS YearPic,
DATEPART(MM, CONVERT (datetime,convert(char(8),picdatum))) AS MonthPic,
DATEPART(WW, CONVERT (datetime,convert(char(8),picdatum))) AS WeekPic
from storage
日期和结果看起来好多了。
但问题来了,我需要你的帮助:
如果我试着把它和:
select count(emp) AS NumberOfPics,
emp AS Employee,
CONVERT (datetime,convert(char(8),picdatum)),
DATEPART(YYYY,CONVERT (datetime,convert(char(8),picdatum))) AS YearPic,
DATEPART(MM, CONVERT (datetime,convert(char(8),picdatum))) AS MonthPic,
DATEPART(WW, CONVERT (datetime,convert(char(8),picdatum))) AS WeekPic
from storage
GROUP BY emp, YearPic, MonthPic
它可能赢了´不起作用,即使我再次使用左边的部分,结果是:
storage.picdatum列在选择列表中无效,因为它不包含在聚合函数中,也不包含在group by子句中。
那么,如何使用datepart函数进行分组,以及如何解决这个特定sql上的聚合问题呢?
1条答案
按热度按时间wixjitnu1#
别名在GROUPBY子句中不起作用-需要用实际值替换它们