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.