sql >> Database >  >> RDS >> Mysql

Kolomwaarden instellen als kolomnamen in het SQL-queryresultaat

Dit gebeurt met een draaitabel . Groeperen op id , geef je CASE uit instructies voor elke waarde die u in een kolom wilt vastleggen en gebruik zoiets als een MAX() aggregeer om de nulls te elimineren en samen te vouwen tot één rij.

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

Hier is een werkend voorbeeld

Opmerking:dit werkt alleen zoals het is voor een eindig en bekend aantal mogelijke waarden voor col1 . Als het aantal mogelijke waarden onbekend is, moet u de SQL-instructie dynamisch in een lus opbouwen.



  1. SYSDATE() vs NOW() in MySQL:wat is het verschil?

  2. Verbinding maken met meerdere SQL-servers in één klik (geregistreerde serversgroep) - SQL Server / TSQL-zelfstudie, deel 5

  3. snelle willekeurige rijselectie in Postgres

  4. Accent- en hoofdletterongevoelige sortering in Oracle met LIKE