从SQL Server 2008中的数据透视表中删除NULL

时间:2013-12-13 12:02:40

标签: sql sql-server

非常感谢可以提供的任何帮助。

我正在从sql server 2008中的视图中转移数据。

视图中的数据如下所示:

Ticker  Acct       QTY
------ ------- ---------- 
AA05    SMBOND  5522000.0000
AA05    SMCORB  485000.0000
AB06    SMCORB  1777000.0000
AB06    SMBOND  191019.0000
AB07    SMBOND  557160.0000
AB07    SMCORB  10853000.0000
ABL11A  SMCORB  80000.0000

我正在运行以下SQL:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols 
  = STUFF((SELECT ', ' + ACCT_CD
           from vw_SLIB_FI_Rebal
           group by ACCT_CD
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')



set @query = 'SELECT TICKER,' + @cols + ' from 
             (
                select TICKER, 
                  ACCT_CD,
                  QTY_SOD
                from vw_SLIB_FI_Rebal
            ) x
            pivot 
            (
                max(QTY_SOD)
                for ACCT_CD in (' + @cols + ')
            ) p '

execute(@query)

这是我得到的结果:

Ticker  SMBOND       SMCORB
------ ------- ---------- 
AA05    5522000.0000 485000.0000
AB06    191019.0000  1777000.0000
AB07    557160.0000  10853000.0000
ABL11A  NULL         80000.0000 '

我想删除NULL并将其设为0.请帮助。

如果需要,我会逐步提供任何其他信息。

1 个答案:

答案 0 :(得分:1)

我不记得是否可以在语句的PIVOT部分使用ISNULL函数,但首先尝试:

pivot
(
    isnull(max(QTY_SOD), 0)
    for ...
)

如果这不起作用,您始终可以将ISNULL函数添加到每个值列。您将需要一个单独的变量来保存列标题,因为您仍然需要在PIVOT语句的IN部分中保持未更改的@cols变量:

select @colsHeader = STUFF((SELECT ', isnull(' + ACCT_CD + ', 0) AS ' + ACCT_CT
       from vw_SLIB_FI_Rebal
       group by ACCT_CD
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,''),
    @cols = STUFF((SELECT ', ' + ACCT_CD
       from vw_SLIB_FI_Rebal
       group by ACCT_CD
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')