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

一时找不到好的解决方法,求一sql,非常急

2012-02-01 
一时找不到好的解决办法,求一sql,非常急,在线等....各位大人,求一条sql,给个思路也行~~~原表数据:级别种类

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

热点排行
Bad Request.