Динамическая альтернатива сводной с 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 Можно ли сделать заявления лучше, чтобы сделать этот запрос более динамичным? Кроме того, я хотел бы видеть другие подходы к этому.

Ответы на вопрос(5)

Ваш ответ на вопрос