DATE数据透视表日列和数据

时间:2018-01-13 07:35:50

标签: sql sql-server

我有以下查询来创建一个以天为列的数据透视表:

SELECT USERID,
CASE WHEN DATEPART(d,DATE) = 26 THEN sick END [26],
CASE WHEN DATEPART(d,DATE) = 27 THEN sick END [27],
CASE WHEN DATEPART(d,DATE) = 28 THEN sick END [28],
/* other days omitted */
CASE WHEN DATEPART(d,DATE) = 25 THEN sick END [25]
FROM tbl_Chktime
WHERE DATE BETWEEN '2017-12-26' AND '2017-12-28'  
AND USERID = '15831' 

当我运行此查询时,这是我的输出:

USERID | 26   |  27  |   28   
15831   0.00    NULL    NULL        
15831   NULL    0.00    NULL        
15831   NULL    NULL    0.00        

Here is an image of the full output

我不想要那些NULL值。相反,我更喜欢将它显示为0.00,类似于:

USERID | 26   |   27  |  28   
15831   0.00    0.00    0.00        

Here is an image showing that

如何更改我的SQL语句,使其输出0.00而不是null?

1 个答案:

答案 0 :(得分:0)

如果您手动停止转动,并且让SQL服务器为您创建转轴,则可以轻松实现此目的:

SELECT * FROM
(SELECT USERID, DATEPART(d,DATE) pivotHeading, sick
FROM tbl_Chktime
WHERE DATE BETWEEN '2017-12-26' AND '2017-12-28'  
AND USERID = '15831') src
PIVOT (Max(sick) FOR pivotHeading IN ([25], [26], [27], [28])) pt

这样,添加新日期并不会延长查询长度,而且语句更短。