我有一张这样的表:
id type
-- ----
1 A
1 B
2 A
2 C
我想将其转换为宽格式,即
id typeA typeB typeC
-- ----- ----- -----
1 yes yes NULL
2 yes NULL yes
我试过这样做:
select distinct id,
case when type = 'A' then yes else NULL end as typeA
case when type = 'B' then yes else NULL end as typeB
case when type = 'C' then yes else NULL end as typeC
from test
但你可以猜到我最终得到了:
id typeA typeB typeC
-- ----- ----- -----
1 yes NULL NULL
1 NULL yes NULL
1 NULL NULL NULL
2 yes NULL NULL
2 NULL NULL NULL
2 NULL NULL yes
即。我最终得到了一个稀疏表,但我希望每个id严格一行。
任何想法?
答案 0 :(得分:2)
使用Min/Max
聚合和Group By
来修复它。
SELECT id,
MIN(CASE WHEN type = 'A' THEN 'yes' ELSE NULL END) AS typeA,
MIN(CASE WHEN type = 'B' THEN 'yes' ELSE NULL END) AS typeB,
MIN(CASE WHEN type = 'C' THEN 'yes' ELSE NULL END) AS typeC
FROM test
GROYP BY id