demo: db <> fiddle
A static pivot может выглядеть так:
Postgres 9.4+
В Postgres 9.4 добавлена функция FILTER
:
SELECT
document_key,
COALESCE(SUM(amount_net) FILTER (WHERE classid = 4021), 0) as "4021", -- A
COALESCE(SUM(amount_net) FILTER (WHERE classid = 4023), 0) as "4023"
FROM test
GROUP BY document_key
ORDER BY document_key
A: GROUP BY document_key
объединяет все группы document_key
.С помощью агрегатной функции SUM
вы добавляете все соответствующие значения amount_net
.Функция FILTER
используется для суммирования только этих значений из строк, содержащих classid = XYZ
.COALESCE
вокруг совокупности составляет от NULL
значений до 0.
Если вам нужно больше столбцов, вам нужно скопировать эту строку кода.
Postgres 9.3 и ниже
SELECT
document_key,
SUM(CASE WHEN classid = 4021 THEN amount_net ELSE 0 END) as "4021",
SUM(CASE WHEN classid = 4023 THEN amount_net ELSE 0 END) as "4023"
FROM test
GROUP BY document_key
ORDER BY document_key