1.行转列
(1)decode实现
SELECT t_year,
MAX(DECODE(t_month,'1月',t_value)) AS 一月,'2月',t_value)) AS 二月,'3月',t_value)) AS 三月,'4月',t_value)) AS 四月
FROM a_testtable WHERE t_month IN('1月','4月')
GROUP BY t_year;
(2)case when实现
SELECT t_year,
MAX(CASE t_month WHEN '1月' THEN t_value END) AS 一月,
MAX(CASE t_month WHEN '2月' THEN t_value END) AS 二月,
MAX(CASE t_month WHEN '3月' THEN t_value END) AS 三月,
MAX(CASE t_month WHEN '4月' THEN t_value END) AS 四月
FROM a_testtable WHERE t_month IN('1月','4月')
GROUP BY t_year;
(3)pivot函数
SELECT * FROM a_testtable
PIVOT(SUM(t_value) FOR t_month IN('1月' AS 一月,'2月' AS 二月,'3月' AS 三月,'4月' AS 四月));
SELECT * FROM
(SELECT t_year AS ye,t_month AS mon,t_value AS val FROM a_testtable) a
PIVOT(SUM(val) FOR mon IN('1月' AS 一月,'4月' AS 四月));
2列转行
准备表及数据
(1)decode实现
SELECT t_year,
DECODE(lvl,1,2,3,4,'4月') AS t_month,one_m,two_m,tree_m,four_m) AS t_qty
FROM b_testtable,(SELECT LEVEL lvl FROM dual CONNECT BY LEVEL<=4)
ORDER BY t_year,t_month;
(2)case when实现
SELECT t_year,
CASE lvl WHEN 1 THEN '1月'
WHEN 2 THEN '2月'
WHEN 3 THEN '3月'
WHEN 4 THEN '4月'
END AS t_month,
CASE lvl WHEN 1 THEN one_m
WHEN 2 THEN two_m
WHEN 3 THEN tree_m
WHEN 4 THEN four_m
END AS t_qty
FROM b_testtable,t_month;
(3)unpivot函数实现
SELECT * FROM b_testtable
UNPIVOT(t_qty FOR t_month IN(one_m AS '1月',two_m AS '2月',tree_m AS '3月',four_m AS '4月'))
ORDER BY t_year,t_month;
原文地址:https://blog.csdn.net/csanningdn
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。