oracle - Oracle 透视查询
问题描述
我在表格中有以下格式的数据。
Date Country City Sales
----------------------------------------------
01/01/2019 USA Alabama 1
01/01/2019 USA Alaska 2
01/01/2019 USA Kansas 3
01/01/2019 USA Maryland 4
01/01/2019 UK London 5
01/01/2019 UK Edinburgh 6
02/01/2019 USA Alabama 7
02/01/2019 USA Alaska 8
02/01/2019 USA Kansas 9
02/01/2019 USA Maryland 10
02/01/2019 UK London 11
02/01/2019 UK Edinburgh 12
03/01/2019 USA Alabama 13
03/01/2019 USA Alaska 14
03/01/2019 USA Kansas 15
03/01/2019 USA Maryland 16
03/01/2019 UK London 17
03/01/2019 UK Edinburgh 18
我想得到如下的输出
USA USA USA USA UK UK
Date Alabama Alaska Kansas Maryland London Edinburgh
-----------------------------------------------------------------------
01/01/2019 1 2 3 4 5 6
02/01/2019 7 8 9 10 11 12
03/01/2019 13 14 15 16 17 18
解决方案
在和PIVOT
的组合上使用 a :country
city
甲骨文设置:
CREATE TABLE table_name ( DT, Country, City, Sales ) AS
SELECT DATE '2019-01-01', 'USA', 'Alabama', 1 FROM DUAL UNION ALL
SELECT DATE '2019-01-01', 'USA', 'Alaska', 2 FROM DUAL UNION ALL
SELECT DATE '2019-01-01', 'USA', 'Kansas', 3 FROM DUAL UNION ALL
SELECT DATE '2019-01-01', 'USA', 'Maryland', 4 FROM DUAL UNION ALL
SELECT DATE '2019-01-01', 'UK', 'London', 5 FROM DUAL UNION ALL
SELECT DATE '2019-01-01', 'UK', 'Edinburgh', 6 FROM DUAL UNION ALL
SELECT DATE '2019-01-02', 'USA', 'Alabama', 7 FROM DUAL UNION ALL
SELECT DATE '2019-01-02', 'USA', 'Alaska', 8 FROM DUAL UNION ALL
SELECT DATE '2019-01-02', 'USA', 'Kansas', 9 FROM DUAL UNION ALL
SELECT DATE '2019-01-02', 'USA', 'Maryland', 10 FROM DUAL UNION ALL
SELECT DATE '2019-01-02', 'UK', 'London', 11 FROM DUAL UNION ALL
SELECT DATE '2019-01-02', 'UK', 'Edinburgh', 12 FROM DUAL UNION ALL
SELECT DATE '2019-01-03', 'USA', 'Alabama', 13 FROM DUAL UNION ALL
SELECT DATE '2019-01-03', 'USA', 'Alaska', 14 FROM DUAL UNION ALL
SELECT DATE '2019-01-03', 'USA', 'Kansas', 15 FROM DUAL UNION ALL
SELECT DATE '2019-01-03', 'USA', 'Maryland', 16 FROM DUAL UNION ALL
SELECT DATE '2019-01-03', 'UK', 'London', 17 FROM DUAL UNION ALL
SELECT DATE '2019-01-03', 'UK', 'Edinburgh', 18 FROM DUAL;
查询:
SELECT *
FROM table_name
PIVOT ( SUM( sales ) FOR ( Country, City ) IN (
( 'USA', 'Alabama' ) AS USA_Alabama,
( 'USA', 'Alaska' ) AS USA_Alaska,
( 'USA', 'Kansas' ) AS USA_Kansas,
( 'USA', 'Maryland' ) AS USA_Maryland,
( 'UK', 'London' ) AS UK_London,
( 'UK', 'Edinburgh' ) AS UK_Edinburgh
) )
ORDER BY dt
输出:
DT | 美国_阿拉巴马 | 美国_阿拉斯加 | 美国_堪萨斯州 | 美国_马里兰 | 英国_伦敦 | 英国_爱丁堡 :-------- | ----------: | ---------: | ---------: | ------------: | --------: | ------------: 19 年 1 月 1 日 | 1 | 2 | 3 | 4 | 5 | 6 2019 年 1 月 2 日 | 7 | 8 | 9 | 10 | 11 | 12 2019 年 1 月 3 日 | 13 | 14 | 15 | 16 | 17 | 18
db<>在这里摆弄
推荐阅读
- php - 尽管设置了区域设置,为什么 strfitme 仍以英文显示日期?
- r - 如何检查字符串(完全或部分)是否与数据框所有列上的值匹配?
- javascript - 单击嵌套元素时数据切换不起作用
- typescript - typeorm connection.createQueryRunner 在nestjs中使用时不是函数
- laravel - 从 Next.js 页面调用 Laravel API 时出现内部服务器错误
- python - Pandas 错误:“尝试获取空序列的 argmax”
- postgresql - 如何使用密钥加密 PostgreSQL 中的整个表
- html - 在小屏幕上水平居中内容
- python-3.x - 如何根据一些计算,诉诸 django 来填充表格视图?
- api - 试图用 API 检索 instgram 照片,它在开发中不起作用