行列转换

 

普通行列转换

假设有张学生成绩表(t)如下

Name Subject Result
张三 语文  
73
张三 数学  
83
张三 物理  
93
李四 语文  
74
李四 数学  
84
李四 物理  
94

想变成 
姓名 语文 数学 物理
张三 
73    83    93
李四 
74    84    94

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 ( ' 张三 ' , ' 数学 ' , ' 83 ' )
insert   into  #t(Name , Subject , Result)  values ( ' 张三 ' , ' 物理 ' , ' 93 ' )
insert   into  #t(Name , Subject , Result)  values ( ' 李四 ' , ' 语文 ' , ' 74 ' )
insert   into  #t(Name , Subject , Result)  values ( ' 李四 ' , ' 数学 ' , ' 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

-- 结果
姓名       数学        物理        语文          
-- -------- ----------- ----------- ----------- 
李四        83            93            74
张三       
83            93            73
 
-- --------------------------------------------------
如果上述两表互相换一下:即

姓名 语文 数学 物理
张三 
73    83    93
李四 
74    84    94

想变成 
Name Subject Result
张三 语文  
73
张三 数学  
83
张三 物理  
93
李四 语文  
74
李四 数学  
84
李四 物理  
94

create   table  #t
(
   姓名 
varchar ( 10 ) ,
   语文 
int  ,
   数学 
int  ,
   物理 
int
)

insert   into  #t(姓名 , 语文 , 数学 , 物理)  values ( ' 张三 ' , 73 , 83 , 93 )
insert   into  #t(姓名 , 语文 , 数学 , 物理)  values ( ' 李四 ' , 74 , 84 , 94 )

select  姓名  as  Name, ' 语文 '   as  Subject,语文  as  Result  from  #t  union
select  姓名  as  Name, ' 数学 '   as  Subject,数学  as  Result  from  #t  union
select  姓名  as  Name, ' 物理 '   as  Subject,物理  as  Result  from  #t
order   by  姓名  desc  

drop   table  #t
 
-- 结果
Name       Subject Result      
-- -------- ------- ----------- 
张三       数学     83
张三       物理    
93
张三       语文    
73
李四       数学    
84
李四       物理    
94
李四       语文    
74

(所影响的行数为 
6  行)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值