問題: 假設(shè)有張學(xué)生成績表(Test)如下
Name Subject Result
張三 語文 80
張三 數(shù)學(xué) 90
張三 物理 85
李四 語文 85
李四 數(shù)學(xué) 92
李四 物理 82
結(jié)果:
姓名 語文 數(shù)學(xué) 物理
張三 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 '張三','數(shù)學(xué)',90 union all
select '張三','物理',85 union all
select '李四','語文',85 union all
select '李四','數(shù)學(xué)',92 union all
select '李四','物理',82
go
SELECT * FROM Test
--用於多行的轉(zhuǎn)換
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)
--如果行數(shù)少這個看起來更加明瞭
select Name as 姓名,
sum(case Subject when '數(shù)學(xué)' then Result end) [數(shù)學(xué)],
sum(case Subject when '物理' then Result end) [物理],
sum(case Subject when '語文' then Result end) [語文]
from Test group by name
我以前面試的時候考試過這種類似的題,也是我們在編程開發(fā)過程中經(jīng)常遇到的一種常見題,我的分析希望對大家有幫助。