首页 » Oracle » 利用case when then语句进行Oracle行列转换

利用case when then语句进行Oracle行列转换

原文 http://blog.csdn.net/NaMgAl_/article/details/79027436

2018-01-11 02:01:32阅读(524)

执行SELECT * FROM sale_info,得到结果集:

<a href=利用case when then语句进行Oracle行列转换" src="http://img.blog.csdn.net/20180110193130338?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTmFNZ0FsXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

现按照题目要求,需横向展开结果集,结果如下图:

利用case when then语句进行Oracle行列转换

先执行脚本文件,导入数据:

--销售统计表及数据
CREATE TABLE sale_info(
       YEAR INT,
       MONTH INT,
       amount NUMBER(6,1)
);
INSERT INTO sale_info VALUES(2014,1,123.2);
INSERT INTO sale_info VALUES(2014,2,235);
INSERT INTO sale_info VALUES(2014,3,312.5);
INSERT INTO sale_info VALUES(2014,4,400.2);
INSERT INTO sale_info VALUES(2014,5,213.8);
INSERT INTO sale_info VALUES(2014,6,233.5);
INSERT INTO sale_info VALUES(2014,7,198.6);
INSERT INTO sale_info VALUES(2014,8,323.2);
INSERT INTO sale_info VALUES(2014,9,333.6);
INSERT INTO sale_info VALUES(2014,10,400);
INSERT INTO sale_info VALUES(2014,11,402.8);
INSERT INTO sale_info VALUES(2014,12,368.5);
INSERT INTO sale_info VALUES(2015,1,324.2);
INSERT INTO sale_info VALUES(2015,2,202.4);
INSERT INTO sale_info VALUES(2015,3,285.3);
INSERT INTO sale_info VALUES(2015,4,401.2);
INSERT INTO sale_info VALUES(2015,5,199.6);
INSERT INTO sale_info VALUES(2015,6,203.7);
INSERT INTO sale_info VALUES(2015,7,188.5);
INSERT INTO sale_info VALUES(2015,8,301.2);
INSERT INTO sale_info VALUES(2015,9,277);
INSERT INTO sale_info VALUES(2015,10,234.6);
INSERT INTO sale_info VALUES(2015,11,224.1);
INSERT INTO sale_info VALUES(2015,12,299.7);
/*要求,检索结果的格式:
YEAR  1月      2月     3月     4月       5月       6月       7月      8月    9月    10月      11月      12月
2014  123.2    235     312.5   400.2     213.8     233.5     198.6    323.2  333.6  400       402.8     368.5
2015  324.2    202.4   285.3   401.2     199.6     203.7     188.5    301.2  277    234.6     224.1     299.7
*/

利用case when then编写sql语句:

SELECT si.YEAR,MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "1月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "2月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "3月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "4月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "5月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "6月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "7月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "8月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "9月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "10月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "11月",
       MAX(CASE WHEN si.MONTH=1 THEN si.amount ELSE 0 END) "12月"
FROM sale_info si
GROUP BY si.Year

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹