Динамическая альтернатива сводной с CASE и GROUP BY
У меня есть таблица, которая выглядит так:
id feh bar
1 10 A
2 20 A
3 3 B
4 4 B
5 5 C
6 6 D
7 7 D
8 8 D
И я хочу, чтобы это выглядело так:
bar val1 val2 val3
A 10 20
B 3 4
C 5
D 6 7 8
У меня есть этот запрос, который делает это:
SELECT bar,
MAX(CASE WHEN abc."row" = 1 THEN feh ELSE NULL END) AS "val1",
MAX(CASE WHEN abc."row" = 2 THEN feh ELSE NULL END) AS "val2",
MAX(CASE WHEN abc."row" = 3 THEN feh ELSE NULL END) AS "val3"
FROM
(
SELECT bar, feh, row_number() OVER (partition by bar) as row
FROM "Foo"
) abc
GROUP BY bar
Это очень изменчивый подход, который становится громоздким, если нужно создать много новых столбцов. Мне было интересно, еслиCASE
Можно ли сделать заявления лучше, чтобы сделать этот запрос более динамичным? Кроме того, я хотел бы видеть другие подходы к этому.