SQL语句之普通行列转换

    
      
  假设有张学生成绩表(tb_rowtocol)如下  
  Name   Subject   Result  
  张三   语文  73  
  张三   数学  83  
  张三   物理  93  
  李四   语文  74  
  李四   数学  84  
  李四   物理  94  
   
  想变成    
  姓名   语文   数学   物理  
  张三   73  83  93  
  李四   74  84  94  
   
  declare   @sql   varchar(4000)  
  set   @sql   =   'select   Name   as   '   +   '姓名'  
  select   @sql   =   @sql   +   '   ,   sum(case   Subject   when   '''+Subject+'''   then   Result   end)   ['+Subject+']'  
  from   (select   distinct   Subject   from   rowtocol)   as   a  
  set   @sql   =   @sql   +   '   from   rowtocol   group   by   name'  
  exec(@sql)    
     
  如果上述两表互相换一下:即  
  表名(cj)  
  姓名   语文   数学   物理  
  张三   73  83  93  
  李四   74  84  94  
   
  想变成    
   
  Name   Subject   Result  
  张三   语文  73  
  张三   数学  83  
  张三   物理  93  
  李四   语文  74  
  李四   数学  84  
  李四   物理  94  
   
  select   姓名   as   Name,'语文'   as   Subject,语文   as   Result   from   CJ   union  
  select   姓名   as   Name,'数学'   as   Subject,数学   as   Result   from   CJ   union  
  select   姓名   as   Name,'物理'   as   Subject,物理   as   Result   from   CJ  
  order   by   姓名   desc    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值