Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Definindo valores de coluna como nomes de coluna no resultado da consulta SQL


Isso é feito com uma tabela dinâmica . Agrupando por id , você emite CASE instruções para cada valor que você deseja capturar em uma coluna e use algo como um MAX() agregado para eliminar os nulos e reduzir para uma linha.
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

Aqui está um exemplo de trabalho


Nota:Isso só funciona como está para um número finito e conhecido de valores possíveis para col1 . Se o número de valores possíveis for desconhecido, você precisará construir a instrução SQL dinamicamente em um loop.