Dit gebeurt met een draaitabel . Groeperen op id
, geef je CASE
uit instructies voor elke waarde die u in een kolom wilt vastleggen en gebruik zoiets als een MAX()
aggregeer om de nulls te elimineren en samen te vouwen tot één rij.
SELECT
id,
/* if col1 matches the name string of this CASE, return col2, otherwise return NULL */
/* Then, the outer MAX() aggregate will eliminate all NULLs and collapse it down to one row per id */
MAX(CASE WHEN (col1 = 'name') THEN col2 ELSE NULL END) AS name,
MAX(CASE WHEN (col1 = 'name2') THEN col2 ELSE NULL END) AS name2,
MAX(CASE WHEN (col1 = 'name3') THEN col2 ELSE NULL END) AS name3
FROM
yourtable
GROUP BY id
ORDER BY id
Hier is een werkend voorbeeld
Opmerking:dit werkt alleen zoals het is voor een eindig en bekend aantal mogelijke waarden voor col1
. Als het aantal mogelijke waarden onbekend is, moet u de SQL-instructie dynamisch in een lus opbouwen.