Odbywa się to za pomocą tabeli przestawnej . Grupowanie według id
, wystawiasz CASE
oświadczenia dla każdej wartości, którą chcesz przechwycić w kolumnie i użyj czegoś takiego jak MAX()
agregować, aby wyeliminować wartości null i zwinąć w dół do jednego wiersza.
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
Oto działająca próbka
Uwaga:Działa to tylko w przypadku skończonej i znanej liczby możliwych wartości dla col1
. Jeśli liczba możliwych wartości jest nieznana, musisz zbudować instrukcję SQL dynamicznie w pętli.