問題: 假設有張學生成績表(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
我以前面試的時候考試過這種類似的題,也是我們在編程開發(fā)過程中經常遇到的一種常見題,我的分析希望對大家有幫助。
posted on 2009-02-20 15:05
Werther 閱讀(332)
評論(0) 編輯 收藏 所屬分類:
15.SQL Server