sql >> Database teknologi >  >> RDS >> Mysql

Indstilling af kolonneværdier som kolonnenavne i SQL-forespørgselsresultatet

Dette gøres med en pivottabel . Gruppering efter id , udsteder du CASE sætninger for hver værdi, du vil fange i en kolonne, og bruge noget som en MAX() aggregere for at eliminere nullerne og kollapse ned til én række.

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

Her er en fungerende prøve

Bemærk:Dette virker kun som det er for et begrænset og kendt antal mulige værdier for col1 . Hvis antallet af mulige værdier er ukendt, skal du bygge SQL-sætningen dynamisk i en loop.



  1. Uddrag dato (åååå/mm/dd) fra et tidsstempel i PostgreSQL

  2. Hvordan kan jeg få summen af ​​flere datetime-værdier?

  3. PostgreSQL 11:Hvad er nyt

  4. SQL Server Lock Escalation