Това се прави с въртяща се таблица . Групиране по id
, издавате CASE
изрази за всяка стойност, която искате да уловите в колона, и използвайте нещо като MAX()
обобщете, за да елиминирате нулевите стойности и да свиете до един ред.
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
Ето работеща извадка
Забележка:Това работи само както е за краен и известен брой възможни стойности за col1
. Ако броят на възможните стойности е неизвестен, трябва да изградите SQL израза динамично в цикъл.