日期:2014-05-17  浏览次数:20400 次

求教一个SQL汇总查询
在存储过程里建立了一个临时表,该表除了前三列其他列都是动态生成的,每次生成的临时表列名和列数量都是不确定的。该表内容样式如下:

供应商    型号     规格     9-1_in     9-1_out     9-2_in     9-2_out
a1       x1      箱        null       10          null        null
a1       x1      箱        5          2           null         20
a2       y1      捆        null       null        8           null
a2       y1      捆        15         null        null        null

想得到如下查询结果:
供应商    型号     规格     9-1_in     9-1_out     9-2_in     9-2_out
a1       x1      箱        5          12          0            20
a2       y1      捆        15         0           8             0

请问这个查询该怎么写?

------解决方案--------------------

create table #t
(供应商 varchar(6),型号 varchar(6), 规格 varchar(6),
 [9-1_in] int, [9-1_out] int, [9-2_in] int, [9-2_out] int)

insert into #t
 select 'a1', 'x1', '箱', null,10,null,null union all
 select 'a1', 'x1', '箱', 5,2,null,20 union all
 select 'a2', 'y1', '捆', null,null,8,null union all
 select 'a2', 'y1', '捆', 15,null,null,null


declare @tsql varchar(6000)

select @tsql='select 供应商,型号,规格,'
            +stuff(
(select ',sum(case when ['+b.name+'] is not null then ['+b.name+'] else 0 end) '''+b.name+''' '
 from&nb