DB2 纵横表转换

普通行列转换:

-------------------------纵表转横表--------------------------------------------

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

 

转换成:

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

<!--EndFragment-->

 

 

select name 姓名,

  max(case subject when '语文' then result else 0 end) 语文,

  max(case subject when '数学' then result else 0 end) 数学,

  max(case subject when '物理' then result else 0 end) 物理

from tb

group by name

<!--EndFragment-->

 

/*加个平均分,总分 
姓名         语文        数学        物理        平均分          总分          
---------- ----------- ----------- ----------- ------------- ---------
李四         74         84        94        84.00         252 
张三         74         83        93        83.33         250 
*/ 

<!--EndFragment-->

 

select name 姓名,

  max(case subject when '语文' then result else 0 end) 语文,

  max(case subject when '数学' then result else 0 end) 数学,

  max(case subject when '物理' then result else 0 end) 物理,

  cast(avg(result*1.0) as decimal(18,2)) 平均分,

  sum(result) 总分

from tb

group by name

<!--EndFragment-->

<!--EndFragment-->

 -------------------------横表转纵表--------------------------------------------

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

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

select * from

(

  select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1 

  union all

  select 姓名 as Name , Subject = '数学' , Result = 数学 from tb1

  union all

  select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1

) t

order by name , case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 when '总分' then 4 end

 

/*加个平均分,总分 
Name       Subject     Result               
---------- -------    -------------------- 
李四         语文      74.00 
李四         数学      84.00 
李四         物理      94.00 
李四         平均分    84.00 
李四         总分      252.00 
张三         语文      74.00 
张三         数学      83.00 
张三         物理      93.00 
张三         平均分    83.33 
张三         总分      250.00 
*/

<!--EndFragment--><!--EndFragment--><!--EndFragment-->

 

<!--EndFragment-->

select * from

(

  select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1 

  union all

  select 姓名 as Name , Subject = '数学' , Result = 数学 from tb1

  union all

  select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1

  union all

  select 姓名 as Name , Subject = '平均分' , Result = cast((语文 + 数学 + 物理)*1.0/3 as decimal(18,2)) from tb1

  union all

  select 姓名 as Name , Subject = '总分' , Result = 语文 + 数学 + 物理 from tb1

) t

order by name , case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 when '平均分' then 4 when '总分' then 5 end

<!--EndFragment-->

<!--EndFragment-->

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值