2017-07-21 4 views
1

Ich habe eine Tabelle wie folgt aus:db2 SQL Wide-Format umwandeln

id type 
-- ---- 
1 A 
1 B 
2 A 
2 C 

Und ich möchte dies also auf Wide-Format zu transformieren

id typeA typeB typeC 
-- ----- ----- ----- 
1 yes yes NULL 
2 yes NULL yes 

Ich habe versucht, dies zu tun durch:

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 

aber wie Sie habe ich am Ende mit erraten:

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 

d. H. Ich habe eine spärliche Tabelle erhalten, aber ich hätte gerne eine Zeile pro ID.

irgendwelche Ideen?

Antwort

2

Verwenden Sie Min/Max Aggregat und Group By, um es zu beheben.

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 
+0

ausgezeichnet. wird in 8 Minuten annehmen :) – brucezepplin