orcale 行转列

网络上关于行转列和列转行的文章不少,但要么太复杂,要么太凌乱,此处用一个小例子说明如何通过简单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
 
 

二.oracle合并列的函数wm_concat的使用详解

oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_concat(column)函数实现字段合并,如果您对oracle wm_concat(column)函数使用方面感兴趣的话,不妨一看。
shopping:
-----------------------------------------
u_id       goods            num
------------------------------------------
1                苹果                2
2                 梨子               5
1                 西瓜               4
3                 葡萄               1
3                香蕉                1
1               橘子                 3
=======================
想要的结果为:
--------------------------------
u_id          goods_sum
____________________
1              苹果,西瓜,橘子
2              梨子
3              葡萄,香蕉
---------------------------------
1.select u_id, wmsys.wm_concat(goods) goods_sum  2. 3.from shopping  4. 5.group by u_id  
想要的结果2:
--------------------------------
u_id          goods_sum
____________________
1              苹果(2斤),西瓜(4斤),橘子(3斤)
2              梨子(5斤)
3              葡萄(1斤),香蕉(1斤)
---------------------------------
使用oracle wm_concat(column)函数实现:
select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum  
from shopping  
group by u_id  
mysql---group_concat

posted @ 2016-01-05 17:17  风沙不留痕  阅读(306)  评论(0)    收藏  举报