sql >> Base de Datos >  >> RDS >> Mysql

Establecer valores de columna como nombres de columna en el resultado de la consulta SQL

Esto se hace con una tabla dinámica . Agrupación por id , emites CASE declaraciones para cada valor que desea capturar en una columna y use algo como MAX() agregado para eliminar los nulos y colapsar en una fila.

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

Aquí hay una muestra funcional

Nota:Esto solo funciona tal cual para un número finito y conocido de valores posibles para col1 . Si se desconoce el número de valores posibles, debe generar la instrucción SQL dinámicamente en un bucle.