在Oracle中基于多列的Pivot



我在主表中有这样的样本数据,值列的数据类型为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,也在结果表列名会不同,可以使用别名。我尝试使用枢轴,但不能形成一个适当的查询。请给我指路。

可以在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列,您可以看到这将如何迅速变得难以控制。

最新更新