我在主表中有这样的样本数据,值列的数据类型为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_one
和identifier_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
列,您可以看到这将如何迅速变得难以控制。