Dette gøres med en pivottabel . Gruppering efter id
, udsteder du CASE
sætninger for hver værdi, du vil fange i en kolonne, og bruge noget som en MAX()
aggregere for at eliminere nullerne og kollapse ned til én række.
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
Her er en fungerende prøve
Bemærk:Dette virker kun som det er for et begrænset og kendt antal mulige værdier for col1
. Hvis antallet af mulige værdier er ukendt, skal du bygge SQL-sætningen dynamisk i en loop.