博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE-行转列
阅读量:7082 次
发布时间:2019-06-28

本文共 1961 字,大约阅读时间需要 6 分钟。

 

CreateTime--2017年6月1日16:17:56

Author:Marydon

行转列的两种方法

参考链接:

  

  

  示例一:

    测试数据源

    第一步:建表

CREATE TABLE DEMO_PIVOT(ID NUMBER,                        NAME VARCHAR(20),                        NUMS1 NUMBER,                        NUMS2 NUMBER,                        NUMS3 NUMBER,                        NUMS4 NUMBER,                        SEASON VARCHAR2(20));

    第二步:造数据

INSERT INTO DEMO_PIVOTVALUES  (1, '苹果', 1000, 1500, 1800, 5000, '第一季');INSERT INTO DEMO_PIVOTVALUES  (2, '苹果', 2000, 1800, 3000, 1000, '第二季');INSERT INTO DEMO_PIVOTVALUES  (3, '葡萄', 4000, 2000, 3000, 3500, '第一季');INSERT INTO DEMO_PIVOTVALUES  (4, '葡萄', 3500, 3000, 2800, 4500, '第二季');INSERT INTO DEMO_PIVOTVALUES  (5, '橘子', 5000, 3000, 4000, 4500, '第一季');INSERT INTO DEMO_PIVOTVALUES  (6, '橘子', 3000, 5000, 1000, 6000, '第二季');INSERT INTO DEMO_PIVOTVALUES  (7, '芒果', 4200, 4000, 3200, 5400, '第一季');INSERT INTO DEMO_PIVOTVALUES  (8, '芒果', 5500, 5000, 2000, 8000, '第二季');COMMIT;

    查询水果每季度销量

      方法一:使用PIVOT()函数,实现行转列 ORACLE11.0以上才支持该函数

WITH PIVOT_DATA AS (SELECT NAME, SEASON, NUMS1 + NUMS2 + NUMS3 + NUMS4 ZONG FROM DEMO_PIVOT)SELECT *  FROM PIVOT_DATAPIVOT (SUM(ZONG) FOR SEASON IN('第一季' 第一季, '第二季' 第二季)) ORDER BY NAME;

      方法二

SELECT T.NAME,       SUM(CASE             WHEN T.SEASON = '第一季' THEN              T.TOTAL           END) 第一季,       SUM(CASE             WHEN T.SEASON = '第二季' THEN              T.TOTAL           END) 第二季  FROM (SELECT NAME, SEASON, NUMS1 + NUMS2 + NUMS3 + NUMS4 TOTAL          FROM DEMO_PIVOT) T GROUP BY T.NAME ORDER BY T.NAME;

  示例二:查询不同工作及不同部门的薪水总和

--这种方式并不能满足要求SELECT JOB, DEPTNO, SUM(SAL) AS SUM_SAL  FROM EMP GROUP BY JOB, DEPTNO ORDER BY JOB, DEPTNO;

    方式一:使用PIVOT()函数,实现行转列 ORACLE11.0以上才支持该函数

WITH PIVOT_DATA AS (SELECT DEPTNO, JOB, SAL FROM EMP)SELECT * FROM PIVOT_DATA PIVOT (SUM(SAL) FOR DEPTNO IN(10, 20, 30));

    方式二

SELECT *  FROM (SELECT DEPTNO, JOB, SAL FROM EMP)PIVOT(SUM(SAL)   FOR DEPTNO IN(10, 20, 30));

    注意:示例二主要展示的是方式一和方式二的不同

 

 

 

转载地址:http://lilml.baihongyu.com/

你可能感兴趣的文章
scala中的下划线_
查看>>
QTreeWidget 获取被双击的子项的层次路径
查看>>
如何调整工作激情
查看>>
数据仓库专题(10)-文本事实和杂项维度
查看>>
VC6下实现remove_reference的方法。
查看>>
数据备份和还原
查看>>
Angular企业级开发(3)-Angular MVC实现
查看>>
SMS系列之一:部署SMS2003 + SP3
查看>>
查看mysql进程--show processlist
查看>>
ProtecTIER网关演绎重复数据删除的硬道理
查看>>
Android 播放Gif 动画
查看>>
Android应用程序组件Content Provider应用实例(4)
查看>>
(原创)创建windows域---深入理解域概念
查看>>
虚幻4,BP写了一个简单的三线跑酷工程
查看>>
“10亿元身价”CEO的6个密码
查看>>
C++/CLI思辨录之内部指针的两面性
查看>>
Angular学习-指令入门
查看>>
Java 如何有效地避免OOM:善于利用软引用和弱引用
查看>>
Linux内核抢占实现机制分析【转】
查看>>
判断一个图是否有环
查看>>