求救!一个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 ', 15
union all select 'c ', '002 ', 20
select *,con=1,num=identity(int,1,1) into #
from ta
update a
set con=(select count(*)from # where 合同号=a.合同号 and num!> a.num)
from # a
执行:
declare @sql varchar(1000)
select @sql= ' '
select @sql=@sql+ ',[代号 '+rtrim(con)+ ']=max(case con when '+rtrim(con)+ ' then
代号 end) '
+ ',[数量 '+rtrim(con)+ ']=sum(case con when '+rtrim(con)+ ' then 数量 else 0 end) '
from # group by con
--print @sql
set @sql= 'select 合同号 '+@sql+ ' from # group by 合同号 '
exec(@sql)