假設(shè)有張學(xué)生成績表(t)如下:
name subject result
張三 語文73
張三 數(shù)學(xué)83
張三 物理93
李四 語文74
李四 數(shù)學(xué)84
李四 物理94
想變成
姓名 語文 數(shù)學(xué) 物理
張三 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ù)學(xué)','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ù)學(xué)','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
--結(jié)果
姓名 數(shù)學(xué) 物理 語文
---------- ----------- ----------- -----------
李四 83 93 74
張三 83 93 73
如果上述兩表互相換一下:即
姓名 語文 數(shù)學(xué) 物理
張三 738393
李四 748494
想變成
name subject result
張三 語文73
張三 數(shù)學(xué)83
張三 物理93
李四 語文74
李四 數(shù)學(xué)84
李四 物理94
代碼
create table #t
(
姓名 varchar(10) ,
語文 int ,
數(shù)學(xué) int ,
物理 int
)
insert into #t(姓名 , 語文 , 數(shù)學(xué) , 物理) values('張三',73,83,93)
insert into #t(姓名 , 語文 , 數(shù)學(xué) , 物理) values('李四',74,84,94)
select 姓名 as name,'語文' as subject,語文 as result from #t union
select 姓名 as name,'數(shù)學(xué)' as subject,數(shù)學(xué) as result from #t union
select 姓名 as name,'物理' as subject,物理 as result from #t
order by 姓名 desc
drop table #t
name subject result
---------- ------- -----------
張三 數(shù)學(xué) 83
張三 物理 93
張三 語文 73
李四 數(shù)學(xué) 84
李四 物理 94
李四 語文 74
(所影響的行數(shù)為 6 行)
更多信息請(qǐng)查看IT技術(shù)專欄