首页 > 解决方案 > Oracle SQL将sql行转换为按另一列分组的列

问题描述

我在为以下场景设计 SQL 时遇到了麻烦。

我的表结构看起来像这样

表 ISK

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

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

标签: sqloraclerowscol

解决方案


使用枢轴

演示

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'));

推荐阅读