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

2018-01-11 12:49:58来源:网络收集作者:管理员人点击

分享

阿里云爆款

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


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


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


利用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);
/*要求,检索结果的格式:
YEAR1月2月 3月 4月5月6月7月8月9月10月11月12月
2014123.2235 312.5 400.2 213.8 233.5 198.6323.2333.6400402.8 368.5
2015324.2202.4 285.3 401.2 199.6 203.7 188.5301.2277234.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

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台