Создать Postgres Pivot как Excel - PullRequest
       9

Создать Postgres Pivot как Excel

0 голосов
/ 18 сентября 2018

Мне нужна помощь в создании сводной таблицы.Я уже попробовал много предложенных решений, но я застрял.Надеюсь, кто-то может помочь.Вот мой сценарий:

Образец Table1

ID              text    2712cb957
document_key    text    201808

Образец Table2

ID          text    2712cb957
amount_net  int     56000
classid     int     4021

Таблица3 (из Таблицы1 и Таблицы2 через внутренний идентификатор соединения)
ключ_документа сумма_сеть classid

201808          10          4021
201808          10          4021
201808          15          4023
201808          13          4023
201807          20          4021
201807          15          4021
…               …           …

Ожидаемая сводная таблица

document_key    4021    4023
201807          35      0
201808          20      28

enter image description here

1 Ответ

0 голосов
/ 18 сентября 2018

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
...