按季度SQL查询的聚合结果

时间:2017-10-11 13:15:56

标签: sql sql-server

假设我有一个表,它在一段时间内将所有导出保存在Microsoft SQL数据库中:

   Name: 
   ExportTable
   Columns:
   id - numeric(18)
   exportdate - datetime

为了获得每周的出口数量,我可以运行以下查询:

SELECT  DATEPART(ISO_WEEK,[exportdate]) as 'exportdate', count(exportdate) as 'totalExports' 
FROM [ExportTable] 
Group By  DATEPART(ISO_WEEK,[exportdate]) 
order by exportdate;

返回:

exportdate  totalExports
----------  ------------
27          13
28          12
29          15
30          8
31          17
32          10
33          7
34          15
35          4
36          18
37          10
38          14
39          14
40          21
41          19

是否有可能按季度汇总周结果,以便输出变得像下面的那样?

更新 很抱歉不清楚,我希望当前的结果可以将upp与之前的结果相加到新的季度。 注意第41周包含21 + 19 = 40 第39周包含157 (13 + 12 + 15 + 8 + 17 + 10 + 7 + 15 + 4 + 18 + 10 + 14 + 14)

exportdate  totalExports    Quarter
----------  ------------    -------
27          13              3
28          25              3
29          40              3
30          48              3
31          65              3
32          75              3
33          82              3
34          97              3
35          101             3
36          119             3
37          129             3
38          143             3
39          157             3 -- Sum of 3 Quarter values.
40          21              4 -- New Quarter show current week value
41          40              4 -- (21+19)

3 个答案:

答案 0 :(得分:2)

你可以使用它。

SELECT  
    DATEPART(ISO_WEEK,[exportdate]) as 'exportdate'
    , SUM( count(exportdate) ) OVER ( PARTITION BY DATEPART(QUARTER,MIN([exportdate])) ORDER BY DATEPART(ISO_WEEK,[exportdate]) ROWS UNBOUNDED PRECEDING ) as 'totalExports'  
    , DATEPART(QUARTER,MIN([exportdate])) [Quarter]
FROM [ExportTable] 
Group By  DATEPART(ISO_WEEK,[exportdate]) 
order by exportdate;

答案 1 :(得分:0)

您可以使用案例陈述将日期分成四分之一。

e.g。

 CASE  
 WHEN EXPORT_DATE BETWEEN '1' AND '4' THEN 1   
 WHEN Export_Date BETWEEN '5' and '9' THEN 2
 ELSE 0 AS [Quarter]  
 END  

这只是一个例子,但你明白了。

然后您可以使用案例中的别名

答案 2 :(得分:0)

{{1}}