【发布时间】:2015-12-18 22:04:23
【问题描述】:
我想在结果表中将那些 NULL 值设置为零。到目前为止我找不到任何解决方案。
(A)
CREATE TABLE ##Temp1
(
tmp_id varchar(8),
tmp_ac varchar(5),
tmp_amt decimal(15,2)
)
Record :
id ac amt
1 30100 100.00
2 30400 300.00
3 30500 500.00
(B) 创建动态列数据透视表:
declare @cols as varchar(max)
declare @query as varchar(max)
select @cols = ISNULL(@cols + ',','') + '[' + tmp_ac + ']' from ##Temp1 order by tmp_ac
set @query = 'select tmp_id, '+ @cols + ' into ##TempPV from
(
select tmp_id, tmp_ac, isnull(tmp_amt,0) as tmp_amt
from ##Temp1
) x
pivot
(
sum(tmp_amt)
for tmp_ac in (' + @cols + ')
) p'
exec (@query)
(C)左外连接表 A 到表主元:
select
##TempA.f_id as [ID],
##TempPV.*
from ##TempA
left outer join ##TempPV
on ##TempA.f_id = tmp_id
order by f_id
(D) 结果:
Id 30100 30400 30500
1 100.00 NULL NULL
2 NULL 300.00 NULL
3 NULL NULL 500.00
4 NULL NULL NULL
5 NULL NULL NULL
(E) 预期结果:
Id 30100 30400 30500
1 100.00 0.00 0.00
2 0.00 300.00 0.00
3 0.00 0.00 500.00
4 0.00 0.00 0.00
5 0.00 0.00 0.00
【问题讨论】:
-
由于 ID 的原因,当您使用 ID 加入它们时,我们会得到空值
-
我必须包含来自##TempA 的所有记录。这就是为什么我必须显示 ##TempA 中的所有 Id。
-
id 4 和 5 来自哪里?
-
假设 ##TempA 预先包含 ID“1”、“2”、“3”、“4”、“5”。
-
所以你想要...选择##TempA.f_id 作为[ID]、ISNULL(##TempPV.[30100], 0) 等?但列名是动态的,例如使用@cols?
标签: sql-server