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

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

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


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

--销售统计表及数据
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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值