【Oracle 11g】(二) 行转列 case when

Posted on 2021-08-30 15:15  MissRong  阅读(348)  评论(0)    收藏  举报

【Oracle 11g】(二) 行转列 case when

一、行转列(case when)

SELECT 
    max(CASE WHEN deptno = 10 THEN cnt ELSE 0 END) "10",
    max(CASE WHEN deptno = 20 THEN cnt ELSE 0 END) "20",
    max(CASE WHEN deptno = 30 THEN cnt ELSE 0 END) "30",
    SUM(cnt) 总人数 
FROM (
    SELECT deptno, COUNT(empno) cnt
    FROM emp
    GROUP BY deptno
    )

需求:请统计每个月份,每个手机品牌的销量

select * from BRAND          ;  --品牌表
select * from ORDER_DETAIL   ;  --订单明细表
select * from PHONE_MODEL    ;  --机型表
SELECT brand_name,
    max(CASE WHEN MONTH='2018-03' THEN sales ELSE 0 END) as "2018-03",
    max(CASE WHEN MONTH='2018-04' THEN sales ELSE 0 END) as "2018-04",
    max(CASE WHEN MONTH='2018-05' THEN sales ELSE 0 END) as "2018-05",
    max(CASE WHEN MONTH='2018-06' THEN sales ELSE 0 END) as "2018-06"
FROM (
    SELECT to_char(order_date, 'yyyy-mm')as MONTH,
           c.brand_name,
           sum(amount) sales
    FROM ORDER_DETAIL a,
         PHONE_MODEL b,
         BRAND c
    WHERE a.mp_no=b.mp_no AND
         b.brand_no=c.brand_no
    GROUP BY to_char(order_date, 'yyyy-mm'), brand_name
)t
GROUP BY brand_name;

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3