如何根据一个月内的日期对查询结果进行分组

时间:2019-02-25 07:46:44

标签: sql sql-server

我的数据库如下所示:

ID |DATETIME  |T_NUMBER|SOLD|STORE_ID|
---+----------+--------+----+--------+
1  |2019-02-01|1111    |10  |STORE_1
-------------------------------------|
2  |2019-02-01|1112    |5   |STORE_1
-------------------------------------|
3  |2019-02-02|1113    |10  |STORE_1
-------------------------------------|
4  |2019-02-02|1114    |7   |STORE_1
-------------------------------------|
5  |2019-02-02|1115    |3   |STORE_1
-------------------------------------|
6  |2019-02-03|1116    |4   |STORE_1
-------------------------------------| etc.

我想要的结果如下:

STORE  | 1 | 2 | 3 | 4 | 5 | ..... |28| 
-------+---+---+---+---+---+-------+--+
STORE_1| 2 | 3 | 1 | 0 | 0 | ..... |0 |
---------------------------------------
STORE_2| X | X | X | X | X | ..... |X |

一点点解释:标头中的数字1、2、3 ... 28表示2月中的DATE。 数字2,3,1,0 .... 0表示每个DATE的交易总数。我想要一个月内的报告。 Store_2表示将来是否有任何商店数据。

我的T-SQL如下所示(绝对错误)

select SUM(T_NUMBER) as 'Total' 
from store_logs
group by cast(time as date)

非常感谢

1 个答案:

答案 0 :(得分:3)

您可以使用PIVOT运算符。

Sum of transactions per DATE是否表示您希望每天交易次数COUNT?如果是这种情况,请将SUM (T_NUMBER)更改为COUNT (T_NUMBER)

SELECT *
FROM   (
           SELECT [STORE_ID], [DAY] = DATEPART (DAY , [DATETIME])
           FROM   store_logs
       ) AS D
       PIVOT
       (
           SUM (T_NUMBER)
           FOR DAY IN ([1], [2], [3], [4], [5], ... [31])
       ) AS P