首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求救!一个SQL语句查询汇总的有关问题!

2012-01-07 
求救!一个SQL语句查询汇总的问题!!!!!!!根据A表合同号代号数量a00110a00210b00315c00220........想要的结

求救!一个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)

热点排行