基于多列在 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_one
和 identifier_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
列,您会发现这将如何迅速失控。
我在主 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_one
和 identifier_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
列,您会发现这将如何迅速失控。