【问题标题】:Pivot in Oracle based on multiple columnsOracle中基于多列的数据透视
【发布时间】:2021-11-25 02:58:21
【问题描述】:

我在主表中有这样的示例数据,值列的数据类型为 varchar。

|primary_id   |identifier_one   |identifier_two   |value      |
|-------------|-----------------|-----------------|-----------|
|10001        |3000             |23               |23_val_1   |
|10001        |3000             |24               |24_val_1   |
|10001        |3001             |25               |25_val_1   |
|10001        |3001             |26               |26_val_1   |
|10002        |3000             |23               |23_val_2   |
|10002        |3000             |24               |24_val_2   |
|10002        |3001             |25               |25_val_2   |
|10002        |3001             |26               |26_val_2   |

我想要的输出是

|primary_id   |3000_23_col     |3000_24_col     |3001_25_col     |3001_26_col     | 
|-------------|----------------|----------------|----------------|----------------|
|10001        |23_val_1        |24_val_1        |25_val_1        |26_val_1        |
|10002        |23_val_2        |24_val_2        |25_val_2        |26_val_2        |

我必须查询主表和 where 子句如primary_id=1001,值实际上是基于两列identifier_oneidentifier_two,同样在结果表列名会不同可能使用别名。我尝试使用数据透视,但无法形成正确的查询。请指导我。

【问题讨论】:

    标签: sql oracle plsql pivot rdbms


    【解决方案1】:

    您绝对可以在PIVOT 子句中使用多个列,这是使用您的表设置的示例:

    SELECT *
    FROM demo
    PIVOT (MAX(VALUE) FOR (identifier_1, identifier_2) IN ((3000, 23) AS A3000_23, (3000, 24) AS A3000_24,
                                                            (3001, 25) AS A3001_25, (3001, 26) AS A3001_26));
    

    注意:请原谅列名中的“A”,您需要以字符而不是数字开头的标识符。

    这是一个显示结果的 DBFiddle (LINK)

    显然,如果您需要列出大量的 PIVOT 列,您可以看到这将如何迅速发展。

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多