sql >> Databasteknik >  >> RDS >> Mysql

Hur man väljer kolumnvärde som kolumnnamn med villkor i SQL-tabell

Ett sätt att gå till väga är att använda villkorlig aggregering

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

Det andra sättet (om du bara är intresserad av dessa två kolumner) skulle vara

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

Antagandet är att både kön och ålder finns för varje namn. Om det inte är fallet, använd en OUTER JOIN istället för en INNER JOIN som så

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

Utdata:

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

Här är SQLFiddle demo



  1. Hur kan jag välja raden med högsta ID i MySQL?

  2. Returnera endast numeriska värden i MySQL

  3. Jag förstår inte Collation? (Mysql, RDBMS, teckenuppsättningar)

  4. Hur man installerar och säkrar MariaDB 10 i CentOS 7