按季度分组(日期部分)返回同一季度的多个行

时间:2018-07-15 23:01:52

标签: sql-server group-by aggregate-functions

我试图返回对“历史记录”表中按季度和年份分组的记录总数的计数。目前我有:

SELECT DISTINCT (CAST(DATEPART(year, CREATE_DATE) AS char) + ' Qtr' + 
                CAST(DATEPART(quarter, CREATE_DATE) AS char)) AS Period,
       COUNT(ID)
FROM HISTORY
GROUP BY CREATE_DATE
ORDER BY Period;

但是我得到了具有相同季度和年份的重复行。我还得到的总记录数低于表中的总记录数。 Here's a sample sql fiddle,以帮助发现问题。

我也不会认为我需要在period列中指定DISTINCT,但是当我不这样做时,我会得到更多的重复信息...我猜这是同一根问题的一部分。 / p>

1 个答案:

答案 0 :(得分:1)

问题在于您要按CREATE_DATE分组,但要按年份和季度分组:

SELECT 
  DATENAME(year, CREATE_DATE) + ' Qtr' + DATENAME(quarter, CREATE_DATE) AS Period,
  COUNT(*) AS NumberOfRecords
FROM HISTORY
GROUP BY DATENAME(year, CREATE_DATE), DATENAME(quarter, CREATE_DATE)
ORDER BY Period;