問題: 假设有张学生成绩表(Test)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
結果:
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82
DROP TABLE Test
create table Test(Name varchar(10),Subject Varchar(10),Result int)
insert Test
select '張三','語文',80 union all
select '張三','數學',90 union all
select '張三','物理',85 union all
select '李四','語文',85 union all
select '李四','數學',92 union all
select '李四','物理',82
go
SELECT * FROM Test
--用於多行的轉換
declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)
--如果行數少這個看起來更加明瞭
select Name as 姓名,
sum(case Subject when '數學' then Result end) [數學],
sum(case Subject when '物理' then Result end) [物理],
sum(case Subject when '語文' then Result end) [語文]
from Test group by name
我以前面試的時候考試過這種類似的題,也是我們在編程開發過程中經常遇到的一種常見題,我的分析希望對大家有幫助。
posted on 2009-02-20 15:05
Werther 阅读(326)
评论(0) 编辑 收藏 所属分类:
15.SQL Server