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;
使用枢轴
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'));
我在为以下场景设计 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;
使用枢轴
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'));