ORACLE 列转行和行转列的SQL

网络上关于 行转列和列转行的文章不少,但要么太复杂,要么太凌乱,此处用一个小例子说明如何通过简单SQL实现行列转换。
test
NAME
KM
CJ
张三
语文
80
张三
数学
86
张三
英语
75
李四
语文
78
李四
数学
85
李四
英语
79
test2
NAME
语文
数学
英语
张三
80
86
75
李四
78
85
79
行转列sql ------test->test2
SELECT   NAME ,
        SUM ( decode (t.km,  '语文' , t.cj,  0 )) 语文,
        SUM ( decode (t.km,  '数学' , t.cj,  0 )) 数学,
        SUM ( decode (t.km,  '英语' , t.cj,  0 )) 英语
   FROM   test  t
  GROUP   BY  t.name
列转行sql ------test2->test
select  t.name, '语文'   AS  km,t.语文  AS  cj  from  test2 t
UNION   ALL
select  t.name, '数学'   AS  km,t.数学  AS  cj  from  test2 t
UNION   ALL
select  t.name, '英语'   AS  km,t.英语  AS  cj  from  test2 t
ORDER   BY   name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值