sql db2转换为宽格式

时间:2017-07-21 10:13:49

标签: sql database db2

我有一张这样的表:

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严格一行。

任何想法?

1 个答案:

答案 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