Mysql
 sql >> Base de données >  >> RDS >> Mysql

Définition des valeurs de colonne en tant que noms de colonne dans le résultat de la requête SQL

Cela se fait avec un tableau croisé dynamique . Regroupement par id , vous émettez CASE instructions pour chaque valeur que vous souhaitez capturer dans une colonne et utilisez quelque chose comme un MAX() agréger pour éliminer les valeurs nulles et réduire à une seule ligne.

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

Voici un exemple fonctionnel

Remarque :Cela ne fonctionne tel quel que pour un nombre fini et connu de valeurs possibles pour col1 . Si le nombre de valeurs possibles est inconnu, vous devez créer l'instruction SQL dynamiquement dans une boucle.