问:如何对转换后的日期列进行分组
Q: How to Group on Converted Datecolumns
我在 Microsoft SQL Server 2016
上使用 TSQL
我想创建一个 SQL 给我按员工、按年和月分组(过去 36 个月)的照片数量
所以这是我首先尝试的:
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)
效果不错Result of my 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
Datepard 和结果看起来好多了。
但是问题来了,我需要你的帮助:
如果我尝试将它与:
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 上的聚合问题?
别名在 group by 子句中不起作用 - 您需要将其替换为实际的
select count(emp) AS NumberOfPics,
emp AS Employee,
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, DATEPART(YYYY,CONVERT (datetime,convert(char(8),picdatum))), DATEPART(MM, CONVERT (datetime,convert(char(8),picdatum))),DATEPART(WW, CONVERT
(datetime,convert(char(8),picdatum)))
我在 Microsoft SQL Server 2016
上使用 TSQL我想创建一个 SQL 给我按员工、按年和月分组(过去 36 个月)的照片数量
所以这是我首先尝试的:
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)
效果不错Result of my 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
Datepard 和结果看起来好多了。
但是问题来了,我需要你的帮助:
如果我尝试将它与:
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 上的聚合问题?
别名在 group by 子句中不起作用 - 您需要将其替换为实际的
select count(emp) AS NumberOfPics,
emp AS Employee,
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, DATEPART(YYYY,CONVERT (datetime,convert(char(8),picdatum))), DATEPART(MM, CONVERT (datetime,convert(char(8),picdatum))),DATEPART(WW, CONVERT
(datetime,convert(char(8),picdatum)))