Mysql
 sql >> Database >  >> RDS >> Mysql

Impostazione dei valori di colonna come nomi di colonna nel risultato della query SQL

Questo viene fatto con una tabella pivot . Raggruppamento per id , emetti CASE istruzioni per ogni valore che desideri acquisire in una colonna e utilizzare qualcosa come un MAX() aggrega per eliminare i valori null e comprimere fino a una riga.

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

Ecco un esempio funzionante

Nota:funziona così solo per un numero finito e noto di possibili valori per col1 . Se il numero di valori possibili è sconosciuto, è necessario creare l'istruzione SQL in modo dinamico in un ciclo.