我有一张这样的桌子:
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只有一行。
有什么想法吗?
发布于 2017-07-21 18:15:59
使用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 https://stackoverflow.com/questions/45235020
复制相似问题