用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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值