Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Spaltenwerte als Spaltennamen im SQL-Abfrageergebnis festlegen

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.