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

问题描述

在以下情况下设计SQL时遇到麻烦。

我的表格结构如下

桌子上的牙齿

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

解决方法

一种方法是条件聚合:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...