非常感谢可以提供的任何帮助。
我正在从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.请帮助。
如果需要,我会逐步提供任何其他信息。
答案 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,'')