日期:2014-05-19  浏览次数:20653 次

求救!一个SQL语句查询汇总的问题!!!!!!!
根据A表
合同号           代号     数量
    a                 001       10
    a                 002       10
    b                 003       15
    c                 002       20
    .                     .
    .                     .
    .                     .
    .                     .
想要的结果:
合同号         代号1   代号1数量     代号2     代号2数量     代号3     代号3数量   。。。。
    a                 001           10             002         10                 null             0       。。。。
    b                 003           15             null         0                 null             0       。。。。
    c                 002           20             null         0                 null             0       。。。。
谢谢各位大师了!!!!!!!!!!

------解决方案--------------------
create table A(合同号 varchar(10), 代号 varchar(10), 数量 int)
insert A select 'a ', '001 ', 10
union all select 'a ', '002 ', 10
union all select 'b ', '003 ', 15
union all select 'c ', '002 ', 20

declare @sql varchar(8000)
set @sql= 'select 合同号, '
select @sql=@sql+quotename( '代号 '+代号)+ '=max(case when 代号= '+quotename(代号, ' ' ' ')+ ' then ' ' '+代号+ ' ' ' end), ',
@sql=@sql+quotename( '代号 '+代号+ '數量 ')+ '=max(case when 代号= '+quotename(代号, ' ' ' ')+ ' then 数量 else 0 end), '
from A
group by 代号
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from A group by 合同号 '
exec(@sql)

--result
合同号 代号001 代号001數量 代号002 代号002數量 代号003 代号003數量
---------- ----- ----------- ----- ----------- ----- -----------
a 001 10 002 10 NULL 0
b NULL 0 NULL 0 003 15
c NULL 0 002 20 NULL 0
------解决方案--------------------

唯一标识不可以更新:(用以下方法生成)
create table ta(合同号 varchar(10), 代号 varchar(20), 数量 int)
insert ta select 'a ', '001 ', 10
union all select 'a ', '002 ', 10
union all select 'b ', '003 ',