假設有張學生成績表(t)如下:
Name Subject Result
張三 語文73
張三 數(shù)學83
張三 物理93
李四 語文74
李四 數(shù)學84
李四 物理94
想變成
姓名 語文 數(shù)學 物理
張三 738393
李四 748494
代碼
create table #t
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)
insert into #t(Name , Subject , Result) values('張三','語文','73')
insert into #t(Name , Subject , Result) values('張三','數(shù)學','83')
insert into #t(Name , Subject , Result) values('張三','物理','93')
insert into #t(Name , Subject , Result) values('李四','語文','74')
insert into #t(Name , Subject , Result) values('李四','數(shù)學','83')
insert into #t(Name , Subject , Result) values('李四','物理','93')
declare @sql varchar(8000)
set @sql = 'select Name as 姓名'
select @sql = @sql + ' , sum(case Subject when ''' + Subject + ''' then Result end) [' + Subject + ']'
from (select distinct Subject from #t) as a
set @sql = @sql + ' from #t group by name'
exec(@sql)
drop table #t
--結果
姓名 數(shù)學 物理 語文
---------- ----------- ----------- -----------
李四 83 93 74
張三 83 93 73
如果上述兩表互相換一下:即
姓名 語文 數(shù)學 物理
張三 738393
李四 748494
想變成
Name Subject Result
張三 語文73
張三 數(shù)學83
張三 物理93
李四 語文74
李四 數(shù)學84
李四 物理94
代碼
create table #t
(
姓名 varchar(10) ,
語文 int ,
數(shù)學 int ,
物理 int
)
insert into #t(姓名 , 語文 , 數(shù)學 , 物理) values('張三',73,83,93)
insert into #t(姓名 , 語文 , 數(shù)學 , 物理) values('李四',74,84,94)
select 姓名 as Name,'語文' as Subject,語文 as Result from #t union
select 姓名 as Name,'數(shù)學' as Subject,數(shù)學 as Result from #t union
select 姓名 as Name,'物理' as Subject,物理 as Result from #t
order by 姓名 desc
drop table #t
Name Subject Result
---------- ------- -----------
張三 數(shù)學 83
張三 物理 93
張三 語文 73
李四 數(shù)學 84
李四 物理 94
李四 語文 74
(所影響的行數(shù)為 6 行)
更多信息請查看IT技術專欄