q:如何对转换的datecolumns进行分组

2o7dmzc5  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(245)

我正在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上的聚合问题呢?

wixjitnu

wixjitnu1#

别名在GROUPBY子句中不起作用-需要用实际值替换它们

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)))

相关问题