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

Cómo seleccionar el valor de columna como nombre de columna con condiciones en la tabla SQL

Una forma de hacerlo es usar la agregación 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

La otra forma (si solo le interesan estas dos columnas) sería

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';

Se supone que tanto el género como la edad existen para cada nombre. Si no es el caso, use un OUTER JOIN en lugar de un INNER JOIN así

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';

Salida:

|   NAME | GENDER | AGE |
|--------|--------|-----|
| Angela | Female |  28 |
|  Davis |   Male |  30 |

Aquí está SQLFiddle demostración