基于多列在 Oracle 中进行透视

Pivot in Oracle based on multiple columns

我在主 table 中有这样的示例数据,值列的数据类型为 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        |

我必须查询主 table 并使用 primary_id=1001 等 where 子句,值实际上基于两列 identifier_oneidentifier_two,结果也是 table 列名可能不同可能使用别名。我尝试使用 pivot 但无法形成正确的查询。请指导我。

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

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));

N.B.: 请原谅列名中的“A”,您需要以字符而不是数字开始标识符。

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

显然,如果您需要列出大量 PIVOT 列,您会发现这将如何迅速失控。