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

Como selecionar o valor da coluna como nome da coluna com condições na tabela SQL


Uma maneira de fazer isso é usar agregação condicional
SELECT name,
       MAX(CASE WHEN field = 'Gender' THEN value END) gender,
       MAX(CASE WHEN field = 'Age' THEN value END) age
  FROM customers
 GROUP BY name

A outra maneira (se você estiver interessado apenas nessas duas colunas) seria
SELECT c1.name, c1.value gender, c2.value age
  FROM customers c1 JOIN customers c2
    ON c1.name = c2.name
   AND c1.field = 'Gender'
   AND c2.field = 'Age';

A suposição é que tanto Gênero quanto Idade existem para cada Nome. Não é o caso, então use um OUTER JOIN em vez de um INNER JOIN igual a
SELECT n.name, c1.value gender, c2.value age
  FROM
(
  SELECT DISTINCT name
    FROM customers
) n LEFT JOIN customers c1
    ON n.name = c1.name AND c1.field = 'Gender' 
    LEFT JOIN customers c2
    ON n.name = c2.name AND c2.field = 'Age';

Saída:
|   NAME | GENDER | AGE |
|--------|--------|-----|
| Angela | Female |  28 |
|  Davis |   Male |  30 |

Aqui está SQLFiddle demonstração