sql >> Databáze >  >> RDS >> Mysql

Nastavení hodnot sloupců jako názvů sloupců ve výsledku dotazu SQL

To se provádí pomocí kontingenční tabulky . Seskupení podle id , vydáte CASE příkazy pro každou hodnotu, kterou chcete zachytit ve sloupci, a použijte něco jako MAX() agregovat, abyste odstranili nuly a sbalili se na jeden řádek.

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

Zde je pracovní ukázka

Poznámka:Toto funguje pouze pro konečný a známý počet možných hodnot pro col1 . Pokud počet možných hodnot není znám, musíte příkaz SQL sestavit dynamicky ve smyčce.



  1. XMLtable s Oracle 11g

  2. Hodnota časového pásma serveru 'AEST' není rozpoznána nebo představuje více než jedno časové pásmo

  3. 4 způsoby, jak databáze zásob těží z maloobchodu

  4. Jak nasadit Teamcity s PostgreSQL pro vysokou dostupnost