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