Sql server 如何摆脱空值表左外联接透视表
我想在结果表中将这些空值设置为零。到目前为止,我找不到任何解决办法 A B创建动态列透视表:Sql server 如何摆脱空值表左外联接透视表,sql-server,Sql Server,我想在结果表中将这些空值设置为零。到目前为止,我找不到任何解决办法 A 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 ##Te
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)
将外部联接表A拆分为表轴:
select
##TempA.f_id as [ID],
##TempPV.*
from ##TempA
left outer join ##TempPV
on ##TempA.f_id = tmp_id
order by f_id
declare @cols2 as varchar(max)
select @cols2 = ISNULL(@cols2 + ',','') + 'ISNULL(##TempPV.[' + tmp_ac + '], 0) as [' + tmp_ac + ']' from ##Temp1 order by tmp_ac
set @query2 = 'select
##TempA.f_id as [ID],
' + @cols2 + '
from ##TempA
left outer join ##TempPV
on ##TempA.f_id = tmp_id
order by f_id'
exec (@query2)
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
您必须在主选择中使用coalesce或isnull。 我还添加了一个带有tempA和you5 id的左连接 查询: 您必须使用第二列列表,因为pivot只需要列名,并且您的选择必须如下:[30400]=coalesce[30400],0 输出: 数据:
您必须在主选择中使用coalesce或isnull。 我还添加了一个带有tempA和you5 id的左连接 查询: 您必须使用第二列列表,因为pivot只需要列名,并且您的选择必须如下:[30400]=coalesce[30400],0 输出: 数据:
不确定这是否有效,但我正在尝试构建查询C,并在其中动态添加列名,周围有一个ISNULL 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
declare @cols2 as varchar(max)
select @cols2 = ISNULL(@cols2 + ',','') + 'ISNULL(##TempPV.[' + tmp_ac + '], 0) as [' + tmp_ac + ']' from ##Temp1 order by tmp_ac
set @query2 = 'select
##TempA.f_id as [ID],
' + @cols2 + '
from ##TempA
left outer join ##TempPV
on ##TempA.f_id = tmp_id
order by f_id'
exec (@query2)
不确定这是否有效,但我正在尝试构建查询C,并在其中动态添加列名,周围有一个ISNULL 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
declare @cols2 as varchar(max)
select @cols2 = ISNULL(@cols2 + ',','') + 'ISNULL(##TempPV.[' + tmp_ac + '], 0) as [' + tmp_ac + ']' from ##Temp1 order by tmp_ac
set @query2 = 'select
##TempA.f_id as [ID],
' + @cols2 + '
from ##TempA
left outer join ##TempPV
on ##TempA.f_id = tmp_id
order by f_id'
exec (@query2)
由于Id的原因,当您使用Id加入它们时,我们会得到空值。sI必须包含来自TempA的所有记录。这就是为什么我必须显示来自TempA的所有Id。Id 4和5从何而来?假设TempA预先包含Id 1,2,3,4,5。所以您希望。。。选择TempA.f_id作为[id],ISNULLTempPV.[30100],0,等等?但是列名是动态的,例如,使用@cols?由于Id的原因,当您使用Id连接它们时,我们会得到null。sI必须包含来自TempA的所有记录。这就是为什么我必须显示来自TempA的所有Id。Id 4和5从何而来?假设TempA预先包含Id 1,2,3,4,5。所以您希望。。。选择TempA.f_id作为[id],ISNULLTempPV.[30100],0,等等?但是列名是动态的,例如使用@cols?非常感谢Julien!这是工作!:顺便问一下,有没有其他方法使Id 4和5显示为零,即使在Pivot Temp文件中找不到它们?因为我必须显示主表TempA中的所有Id。非常感谢Julien!这是工作!:顺便问一下,有没有其他方法使Id 4和5显示为零,即使在Pivot Temp文件中找不到它们?因为我必须显示主表TempA中的所有Id。非常感谢您!基于你的想法,我终于解决了我的问题;很高兴它有用:你应该强调你的最终解决方案是什么,以帮助他人,例如,创建一个新的答案,如果提供的答案没有一个是正确的,则标记为正确的。非常感谢!基于你的想法,我终于解决了我的问题;很高兴它有用:你应该强调你的最终解决方案是什么,以帮助他人,例如,创建一个新的答案,如果提供的答案没有一个按原样工作,则标记为正确。