将PIVOT中的空值替换为0

问题描述 投票:0回答:1

我尝试在PIVOT函数中将输出的(空)值转换为0(零),但没有成功。

下面是表格和我尝试过的语法:

SELECT DISTINCT isnull([DayLoad],0) FROM #Temp1

#Temp1中的数据:

zone  dayB    templt cid  DayLoad
other 10      other   1    2020-05-28
other 10      other   1    2020-05-29
other 10      other   1    2020-05-30
other 10      other   1    2020-05-31
other 4       other   1    2020-06-02
other 10      other   1    2020-06-02
other 10      other   1    2020-06-01

我的请求:

DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DayLoad], 106) + ']', 
                                  '[' + CONVERT(NVARCHAR, [DayLoad], 106) + ']')
               FROM    (SELECT DISTINCT [DayLoad] FROM #Temp1) PV  
               ORDER BY [DayLoad]

DECLARE @query NVARCHAR(MAX)
SET @query = '           
              SELECT *
                      into #temptable
                      FROM 
             (
                 SELECT 

                ''''+[zone]+'' ''          + ''''+convert(varchar(50),[dayB])+''''+''+''           +'' ''+(case when [templt]=''Прочее'' then '''' else [templt] end)+''''    as [zone/dayB]
                ,[DayLoad]
                ,[cid]
                ,[dayB]
                ,[zone]
                FROM #Temp1
             ) x
             PIVOT 
             (
                 sum([cid])  
                 FOR [DayLoad] IN ('+ @cols + ')
            ) p 

select *
from #temptable            
order by [zone],[dayB]

drop table #temptable      
            '     
EXEC(@query)
DROP TABLE #Temp1
sql sql-server pivot isnull
1个回答
0
投票

请参考下面的示例,当您具有空值和空字符串时,正确的选项是与case语句一起使用,

SELECT DISTINCT case when ([DayLoad] is null or [DayLoad] = '') then 0 else [DayLoad] end FROM #Temp1
© www.soinside.com 2019 - 2024. All rights reserved.