问题描述
在以下情况下设计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;
,
使用枢轴
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'));