Использовать значение в таблице в качестве имени столбца в результате запроса - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть следующая таблица, которую вы также можете найти в SQL fiddle здесь :

CREATE TABLE Flows(
    Flow_Date DATE,
    Product TEXT,
    FlowType TEXT,
    Quantity VARCHAR(255)
);

INSERT INTO Flows
(Flow_Date, Product, FlowType, Quantity)
VALUES 
("2019-05-23", "Product A", "Inbound", "500"),
("2019-10-08", "Product A", "Outbound", "200"),
("2019-11-08", "Product A", "Outbound", "100"),
("2019-11-08", "Product B", "Inbound", "700"),
("2019-11-24", "Product A", "Inbound", "200"),
("2019-12-14", "Product A", "Inbound", "400"),
("2019-12-14", "Product A", "Outbound", "300"),
("2020-12-14", "Product B", "Outbound", "650"),
("2020-02-08", "Product B", "Inbound", "250"),
("2020-02-15", "Product A", "Outbound", "240"),
("2020-02-15", "Product B", "Outbound", "170"),
("2020-02-24", "Product A", "Outbound", "125"),
("2020-02-25", "Product A", "Inbound", "470");

И я использую следующий запрос, чтобы получить количество Inbounds и Outbounds:

SELECT Product, Flowtype, sum(Quantity)
FROM Flows
GROUP BY 1,2;

Все это прекрасно работает.


Теперь мне интересно, можно ли использовать Inbound и Outbound в качестве column name в результатах запроса.
Результат должен выглядеть следующим образом:

             Inbound        Outbound
Product A    1570            965
Product B    950             820

Что мне нужно изменить в моем запросе, чтобы он работал?

Ответы [ 3 ]

0 голосов
/ 05 февраля 2020

Вы можете сделать условное агрегация. Для этого необходимо удалить столбец FlowType из предложения GROUP BY и использовать его в условных выражениях в агрегатных функциях:

SELECT 
    Product, 
    sum(case when FlowType = 'Inbound' then Quantity else 0 end) Inbound,
    sum(case when FlowType = 'Outbound' then Quantity else 0 end) Outbound
FROM Flows
GROUP BY Product;
0 голосов
/ 05 февраля 2020

ВЫБЕРИТЕ продукт, СУММА (СЛУЧАЙ, КОГДА FlowType = «Входящий», ТО количество ELSE 0 КОНЕЦ) AS Входящий, СУММА (СЛУЧАЙ, КОГДА FlowType = «Исходящий», ТО количество ELSE 0 КОНЕЦ), КАК Исходящий поток FROM GROUP * Продукт

0 голосов
/ 05 февраля 2020

Вы можете сделать условное агрегирование:

SELECT Product, 
       sum(case when FlowType = 'Inbound' then Quantity else 0 end),
       sum(case when FlowType = 'Outbound' then Quantity else 0 end)
FROM Flows
GROUP BY Product;
...