Oracle数据表的透视函数Pivot(行转列)
前言
行转列,依照实际的业务需求,在Oracle数据库中创建相应的透视/交叉表。推荐阅读官方文档 透视和逆透视
透视(行转列)
原查询语句为:
1 | SELECT p.Prod_date,p.INDEX_NAME ,p.ITEM_VALUE |
查询结果为:
| Prod_date | INDEX_NAME | ITEM_VALUE |
| :—-: | :—-: | :—-: |
| 2023-01-01 | 商品量 | 6154086 |
| 2023-01-01 | 工业产量 | 6308353 |
| 2023-01-01 | 销售量 | 7632859 |
| 2023-01-02 | 商品量 | 6260378 |
| 2023-01-02 | 工业产量 | 6341415 |
| 2023-01-02 | 销售量 | 7293744 |
| 2023-01-03 | 商品量 | 6396051 |
| 2023-01-03 | 工业产量 | 6350111 |
| 2023-01-03 | 销售量 | 7571332 |
我们需要把Index_Name字段横行排列,形成新的交叉表,以方便我们在后续的报表上使用,这个时候就要使用到pivot函数。
1 | SELECT * FROM ( |
查询后的结果为:
| Prod_date | SPL_VALUE | GYCL_VALUE | XSL_VALUE |
| :—-: | :—-: | :—-: | :—-: |
| 2023-01-01 |6154086 |6308353 | 7632859 |
| 2023-01-02 |6260378 |6341415 | 7293744 |
| 2023-01-03 |6396051 |6350111 | 7571332 |
结语
除了透视pivot函数Oracle 11g还提供了反透视unpivot函数,可以将列转换为行。具体的使用还得看实际的业务场景了。