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

本文共 2020 字,大约阅读时间需要 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));

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

 

 

 

转载于:https://www.cnblogs.com/Marydon20170307/p/6929522.html

你可能感兴趣的文章
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
HTML5与CSS3基础(五)
查看>>
WinDbg调试C#技巧,解决CPU过高、死锁、内存爆满
查看>>
linux脚本中有source相关命令时的注意事项
查看>>
css样式表中的样式覆盖顺序
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
REST Web 服务(二)----JAX-RS 介绍
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>