Dies geschieht mit einer Pivot-Tabelle . Gruppierung nach id
, geben Sie CASE
aus -Anweisungen für jeden Wert, den Sie in einer Spalte erfassen möchten, und verwenden Sie so etwas wie MAX()
aggregieren, um die Nullen zu eliminieren und auf eine Zeile zu reduzieren.
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 ist ein funktionierendes Beispiel
Hinweis:Dies funktioniert unverändert nur für eine endliche und bekannte Anzahl möglicher Werte für col1
. Wenn die Anzahl der möglichen Werte unbekannt ist, müssen Sie die SQL-Anweisung dynamisch in einer Schleife aufbauen.