• Oracle列转行SQL语句_01


    Oracle列转行SQL语句_01

    CREATE_TIME   COMMISSION
    ----------- ------------
    2012/02/02         4000
    2011/01/13         6500
    2011/05/17         3500
    2012/02/01         4000
    2012/02/05         4444
    2011/12/16         5000
    2012/01/05         1200
    2011/10/19         2800
    2012/01/01         2200
    查询结果如下表结构
    年份  1月  2月  3月 4月  5月 6月 7月 8月 9月 10月 11月 12月
    2011 6500  0       0   0   3500  0    0     0   0   2800  0     5000
    2012 3400 12444 0   0       0    0    0    0    0      0     0        0
    就是根据原始表的数据,统计出每年每月的营业额;
    ;
    CREATE TABLE TEST_LYH AS
    select to_date('2012/02/02','YYYY/MM/DD') AS CREATE_TIME, 4000 AS COMMISSION
    FROM DUAL
    UNION ALL
    select to_date('2011/01/13','YYYY/MM/DD') AS CREATE_TIME, 6500 AS COMMISSION
    FROM DUAL
    UNION ALL
    select to_date('2011/05/17','YYYY/MM/DD') AS CREATE_TIME, 3500 AS COMMISSION
    FROM DUAL
    UNION ALL
    select to_date('2012/02/01','YYYY/MM/DD') AS CREATE_TIME, 4000 AS COMMISSION
    FROM DUAL
    UNION ALL
    select to_date('2012/02/15','YYYY/MM/DD') AS CREATE_TIME, 4444 AS COMMISSION
    FROM DUAL
    UNION ALL
    select to_date('2011/12/16','YYYY/MM/DD') AS CREATE_TIME, 5000 AS COMMISSION
    FROM DUAL
    UNION ALL
    select to_date('2012/01/05','YYYY/MM/DD') AS CREATE_TIME, 1200 AS COMMISSION
    FROM DUAL
    UNION ALL
    select to_date('2011/10/19','YYYY/MM/DD') AS CREATE_TIME, 2800 AS COMMISSION
    FROM DUAL
    UNION ALL
    select to_date('2012/01/01','YYYY/MM/DD') AS CREATE_TIME, 2200 AS COMMISSION
    FROM DUAL
    ;
    --简单SQL

    SELECT  TO_CHAR(CREATE_TIME,'YYYY') AS "年份"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'01',COMMISSION,0)) AS "01月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'02',COMMISSION,0)) AS "02月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'03',COMMISSION,0)) AS "03月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'04',COMMISSION,0)) AS "04月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'05',COMMISSION,0)) AS "05月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'06',COMMISSION,0)) AS "06月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'07',COMMISSION,0)) AS "07月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'08',COMMISSION,0)) AS "08月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'09',COMMISSION,0)) AS "09月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'10',COMMISSION,0)) AS "10月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'11',COMMISSION,0)) AS "11月"
           ,SUM(DECODE(TO_CHAR(CREATE_TIME,'MM'),'12',COMMISSION,0)) AS "12月"
    FROM TEST_LYH
    group by TO_CHAR(CREATE_TIME,'YYYY')

    ;
    SELECT  CREATETION AS "年份"
           ,SUM(DATE_ROW01) AS "01月"
           ,SUM(DATE_ROW02) AS "02月"
           ,SUM(DATE_ROW03) AS "03月"
           ,SUM(DATE_ROW04) AS "04月"
           ,SUM(DATE_ROW05) AS "05月"
           ,SUM(DATE_ROW06) AS "06月"
           ,SUM(DATE_ROW07) AS "07月"
           ,SUM(DATE_ROW08) AS "08月"
           ,SUM(DATE_ROW09) AS "09月"
           ,SUM(DATE_ROW10) AS "10月"
           ,SUM(DATE_ROW11) AS "11月"
           ,SUM(DATE_ROW12) AS "12月"
    FROM
    (       
    SELECT  CREATETION
          ,NVL(CASE
               WHEN MONTH = '01' THEN  SUM(COMMISSION) END,0)  AS DATE_ROW01
          ,NVL(CASE
               WHEN MONTH = '02' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW02
          ,NVL(CASE
               WHEN MONTH = '03' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW03
          ,NVL(CASE
               WHEN MONTH = '04' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW04
          ,NVL(CASE
               WHEN MONTH = '05' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW05
          ,NVL(CASE
               WHEN MONTH = '06' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW06
          ,NVL(CASE
               WHEN MONTH = '07' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW07
          ,NVL(CASE
               WHEN MONTH = '08' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW08
          ,NVL(CASE
               WHEN MONTH = '09' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW09
          ,NVL(CASE
               WHEN MONTH = '10' THEN  SUM(COMMISSION) END,0) AS  DATE_ROW10
          ,NVL(CASE
               WHEN MONTH = '11' THEN  SUM(COMMISSION) END,0) AS DATE_ROW11  
          ,NVL(CASE
               WHEN MONTH = '12' THEN  SUM(COMMISSION) END,0) AS DATE_ROW12               
    FROM  (
    SELECT TO_CHAR(CREATE_TIME,'YYYY') AS CREATETION
          ,TO_CHAR(CREATE_TIME,'MM')  AS MONTH
          ,COMMISSION,ROW_NUMBER() OVER(PARTITION BY to_char(CREATE_TIME,'YYYY') ORDER BY TO_CHAR(CREATE_TIME,'MM') ) AS RN
      FROM TEST_LYH
      )
      GROUP BY CREATETION,MONTH
      )
      GROUP BY CREATETION
      ORDER BY CREATETION

    -- 刘轶鹤

  • 相关阅读:
    Ajax概述,封装以及联合模板引擎进行数据交互
    2.7 Python-运算符
    B+树结构与索引<二> _ 索引页示例
    java计算机毕业设计Vue网上书籍购买商城登录源码+数据库+系统+lw文档
    【echarts】04、echarts+vue2 - 折线图
    深度学习(四)之电影评论分类
    matplotlib绘图
    Android C++系列:Linux网络(三)协议格式
    基于Java的音乐网站管理系统设计与实现(源码+lw+部署文档+讲解等)
    《C++API设计》读书笔记(3):模式
  • 原文地址:https://blog.csdn.net/AlexLiu_2019/article/details/125377514