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