暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中,数据库中有一张如下所示的表,表名为sales。。。查询出如下所示的结果。【行转列】

DB宝 2017-04-10
1240

Q
题目如下所示:

  数据库中有一张如下所示的表,表名为sales。

季度

销售量

1991

1

11

1991

2

12

1991

3

13

1991

4

14

1992

1

21

1992

2

22

1992

3

23

1992

4

24

要求:写一个SQL语句查询出如下所示的结果。

一季度

二季度

三季度

四季度

1991

11

12

13

14

1992

21

22

23

24


     

A
答案如下所示:


    

   环境如下所示:

  1. CREATE TABLE sales(年 NUMBER,季度 NUMBER ,销售量 NUMBER);

  2. INSERT INTO sales VALUES(1991, 1 ,11);

  3. INSERT INTO sales VALUES(1991, 2 ,12);

  4. INSERT INTO sales VALUES(1991, 3 ,13);

  5. INSERT INTO sales VALUES(1991, 4 ,14);

  6. INSERT INTO sales VALUES(1992, 1 ,21);

  7. INSERT INTO sales VALUES(1992, 2 ,22);

  8. INSERT INTO sales VALUES(1992, 3 ,23);

  9. INSERT INTO sales VALUES(1992, 4 ,24);


  10. SELECT * FROM sales;


  11. ------------------------------------

  12.     季度 销售量

  13. 1 1991 1 11

  14. 2 1991 2 12

  15. 3 1991 3 13

  16. 4 1991 4 14

  17. 5 1992 1 21

  18. 6 1992 2 22

  19. 7 1992 3 23

  20. 8 1992 4 24

 

  这是一道行转列的题目,采用聚合函数+DECODE或CASE来回答即可,如下所示

  1. SELECT 年, 

  2. SUM(CASE WHEN 季度=1 THEN 销售量 ELSE 0 END) AS 一季度,

  3. SUM(CASE WHEN 季度=2 THEN 销售量 ELSE 0 END) AS 二季度,

  4. SUM(CASE WHEN 季度=3 THEN 销售量 ELSE 0 END) AS 三季度,

  5. SUM(CASE WHEN 季度=4 THEN 销售量 ELSE 0 END) AS 四季度

  6. FROM SALES 

  7. GROUP BY 年;

 

    此题若使用PIVOT函数,如下所示:


  1. SELECT *

  2.   FROM SALES

  3. PIVOT(SUM(销售量)

  4.    FOR 季度 IN(1 AS "一季度", 2 AS "二季度", 3 AS "三季度", 4 AS "四季度"))

  5.  ORDER BY 1;



    此题若使用临时表的方式,如下所示:


  1. SELECT T.年,

  2.        NVL(SUM(T1.一季度),0) AS "一季度",

  3.        NVL(SUM(T2.二季度),0) AS "二季度",

  4.        NVL(SUM(T3.三季度),0) AS "三季度",

  5.        NVL(SUM(T4.四季度),0) AS "四季度"

  6.   FROM (SELECT 年,销售量 AS "一季度" FROM SALES A WHERE A.季度 = '1') T1,

  7.        (SELECT 年,销售量 AS "二季度" FROM SALES A WHERE A.季度 = '2') T2, 

  8.        (SELECT 年,销售量 AS "三季度" FROM SALES A WHERE A.季度 = '3') T3, 

  9.        (SELECT 年,销售量 AS "四季度" FROM SALES A WHERE A.季度 = '4') T4,

  10.        (SELECT DISTINCT 年 FROM SALES) T

  11.  WHERE T.年 = T1.年(+)

  12.    AND T.年 = T2.年(+)

  13.    AND T.年 = T3.年(+)

  14.    AND T.年 = T4.年(+)

  15.  GROUP BY T.年

  16.  ORDER BY 1; 









DB笔试面试历史连接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:230161599

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。


最后修改时间:2020-01-10 21:18:24
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论