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

一时找不到好的解决办法,求一sql,非常急,在线等....
各位大人,求一条sql,给个思路也行~~~
原表数据:
级别           种类                 得点数
1 web                     10
2 java         20
3 jsp         30
4 jsp         40
5 web                     50

得到以下表:      
级别   web                   java               jsp
1   10
2         20
3                                                   30
4                                                                   40
5   50


------解决方案--------------------
select 级别,web=sum(case when 种类= 'web ' then 得点数 else 0 end) ,
java=sum(case when 种类= 'java ' then 得点数 else 0 end) ,
jsp=sum(case when 种类= 'jsp ' then 得点数 else 0 end)
from c
group by 级别
------解决方案--------------------
select 级别,web=case when 种类= 'web ' then 得点数 else ' ' end ,
java=case when 种类= 'java ' then 得点数 else ' ' end ,
jsp=case when 种类= 'jsp ' then 得点数 else ' ' end
from tab
group by 级别

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

create table T(级别 int, 种类 varchar(10), 得点数 int)
insert T select 1, 'web ', 10
union all select 2, 'java ', 20
union all select 3, 'jsp ', 30
union all select 4, 'jsp ', 40
union all select 5, 'web ', 50

declare @sql varchar(8000)
set @sql= 'select 级别, '
select @sql=@sql+quotename(种类)+ '=sum(case when 种类= '+quotename(种类, ' ' ' ')+ ' then 得点数 else 0 end), '
from T
group by 种类
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from T group by 级别 '
exec(@sql)

--result
级别 java jsp web
----------- ----------- ----------- -----------
1 0 0 10
2 20 0 0
3 0 30 0
4 0 40 0
5 0 0 50
------解决方案--------------------
跟邹老大学的
DECLARE @s varchar(8000)
SET @s = ' '
SELECT @s = @s + N ', ' + QUOTENAME(种类)+ N '= (case 种类 when '+QUOTENAME(种类, ' ' ' ')+ ' then sum(得点数) else 0 end) '
FROM(
SELECT DISTINCT 种类 FROM 表
)A
EXEC( '
select
级别 ' + @s + '
FROM ab
GROUP BY 级别,种类 order by 级别 ')