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