Oracle SQL 将 sql 行转换为按另一列分组的列

Oracle SQL Transforming sql rows into columns grouping by another column

我在为以下场景设计 SQL 时遇到了问题。

我的 table 结构如下所示

TABLE IMSK

id | key | value | group_id
1  | k1  | a1    | g1
2  | k2  | a2    | g1
3  | k3  | a3    | g1
4  | k1  | b1    | g2
5  | k2  | b2    | g2
6  | k3  | b3    | g2

如您所见,我为每个组 ID 存储了 3 个密钥。每个 group_id 的值将不同。我需要按以下方式在报告中显示此信息。

k1 | k2 | k3
a1 | a2 | a3
b1 | b2 | b3

键将成为列 headers,每一行将对应一个 group_id

一种方法是条件聚合:

select group_id,
       max(case when key = 'k1' then value end) as key1,
       max(case when key = 'k2' then value end) as key2,
       max(case when key = 'k3' then value end) as key3
from imsk
group by group_id;

使用枢轴

Demo

WITH CTE1 AS(
SELECT KEY, VALUE FROM TABLE1)
SELECT * FROM  CTE1
PIVOT (MAX(VALUE) FOR KEY IN ('k1', 'k2', 'k3'))
UNION
SELECT * FROM  CTE1
PIVOT (MIN(VALUE) FOR KEY IN ('k1', 'k2', 'k3'));