Detta görs med en pivottabell . Gruppering efter id
, utfärdar du CASE
satser för varje värde du vill fånga i en kolumn och använd något som en MAX()
aggregera för att eliminera nollorna och kollapsa ner till en rad.
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
Här är ett fungerande exempel
Obs:Detta fungerar bara som det är för ett ändligt och känt antal möjliga värden för col1
. Om antalet möjliga värden är okänt måste du bygga SQL-satsen dynamiskt i en loop.