日期:2014-05-18  浏览次数:20738 次

求助:关于一个查询的SQL语句
我有一个表
ID   ClassType   SUM  
1         A                 4
1         A                 1
1         B                 2  
1         B                 1
1         C                 5  
6         A                 2  
6         A                 1  
6         B                 4  
6         B                 3  
6         C                 1
6         C                 2

想要得到的结果是
ID     A       B       C
1       5       3       5
6       3       7       3

请高人指点如何实现,谢谢!

------解决方案--------------------
create table ta(ID int, ClassType varchar(2),[SUM] int)
insert ta select 1, 'A ', 4
union all select 1, 'A ', 1
union all select 1, 'B ', 2
union all select 1, 'B ', 1
union all select 1, 'C ', 5
union all select 6, 'A ', 2
union all select 6, 'A ', 1
union all select 6, 'B ', 4
union all select 6, 'B ', 3
union all select 6, 'C ', 1
union all select 6, 'C ', 2


declare @s varchar(4000)
set @s= ' '
select @s=@s+ ', '+quotename(ClassType)+ '=sum(case ClassType when '+quotename(ClassType, ' ' ' ')
+ ' then [sum] else 0 end) '
from ta group by ClassType
set @s= 'select id '+@s+ ' from ta group by id '
exec(@s)

id A B C
----------- ----------- ----------- -----------
1 5 3 5
6 3 7 3

(2 行受影响)


------解决方案--------------------
Soul25() ( ) 信誉:100 Blog 2007-04-02 09:56:14 得分: 0


有没有可以不用临时表的?


------

如果你的ClassType固定只有這麼三種,可以用如下語句。
否則就必要用roy_88(中国风_燃烧你的激情!!!) 的方法,用動態SQL語句。

Select
ID,
SUM(Case ClassType When 'A ' Then [SUM] Else 0 End) As A,
SUM(Case ClassType When 'B ' Then [SUM] Else 0 End) As B,
SUM(Case ClassType When 'C ' Then [SUM] Else 0 End) As C
From

Group By
ID
------解决方案--------------------
借用下roy_88(中国风_燃烧你的激情!!!) 的数据.
但如果ClassType不止A,B,C的话就要改查询语句,roy_88的不用改.
drop table ta
go
create table ta(ID int, ClassType varchar(2),[SUM] int)
insert ta select 1, 'A ', 4
union all select 1, 'A ', 1
union all select 1, 'B ', 2
union all select 1, 'B