如何每周在列中对数据进行分组,在行中每小时对数据进行分组

时间:2021-03-23 14:51:02

标签: sql sql-server

我有如下数据

ID  SalesTime           Qty Unit Price Item 
1   01/01/2021 08:10:00 10       10    A
2   01/01/2021 11:30:00  2        9    B
3   01/01/2021 11:59:50  1        8    C
4   01/02/2021 13:00:00  5       15    D
5   01/03/2021 10:00:00  4       10    A 
6   01/03/2021 12:00:00  5        9    B
7   01/03/2021 12:50:00  6       15    D
8   01/04/2021 10:50:00  5        8    C
9   01/04/2021 11:10:00  2       10    A
10 ............

我想将总数汇总到表格中, 例如:

              Mon Tue Wed Thu Fri Sat Sun
08:00~09:59    20  21  50 100  60  70 210 
10:00~11:59    60  25  60  90  75  80 200  
12:00~13:59   100  10  50  60  70  50 150 

如何在 MS SQL 中做到这一点,非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以提取小时并将行除以二。然后对列使用条件聚合。假设您想要价格乘以数量的总和:

select convert(time, dateadd(hour, 2 * (datepart(hour, salestime) / 2), 0)) as hh,
       sum(case when datename(weekday, salestime) = 'Monday' then qty * unit_price end) as mon,
       sum(case when datename(weekday, salestime) = 'Tuesday' then qty * unit_price end) as tue,
       . . . 
from t
group by datepart(hour, salestime) / 2
order by min(salestime);

注意:这只是返回时间段的开始,而不是整个范围。