Суммируйте и группируйте столбец по условным критериям - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть таблица, и я хочу использовать «Функции сумм» по некоторым критериям. Например:

ProductName     Type    Amount
-------------------------------
ProductA        2       10
ProductB        7       10
ProductA        8       10
ProductA        8       10
ProductC        7       10
ProductA        7       10
ProductA        3       10
ProductA        7       10
ProductB        3       10
ProductB        8       10

Я хочу сгруппировать и суммировать каждый продукт по следующей формуле:

Product Amount = Sum( (Type7 amount)+(Type8 amount)) - Sum( (Type2 amount)+(Type3 amount))

Итак, результат запроса нашего примера должен быть:

ProductName     Amount
-----------------------
ProductA        20
ProductB        10
ProductC        10

У меня есть запрос, который работает:

SELECT CL.DEFINITION_
    ,ST.TRCODE
    ,IT.NAME
    ,SUM(ST.AMOUNT) AS AMOUNT
    ,
FROM LG_060_CLCARD CL
    ,LG_060_ITEMS IT
    ,LG_060_04_STLINE ST
WHERE IT.LOGICALREF = ST.STOCKREF
    AND ST.CLIENTREF = CL.LOGICALREF
    AND ST.TRCODE IN (
        '2'
        ,'3'
        ,'7'
        ,'8'
        )
GROUP BY CL.DEFINITION_
    ,ST.TRCODE
    ,IT.NAME
    ,
ORDER BY CL.DEFINITION_
    ,ST.TRCODE
    ,IT.NAME

Этот запрос показывает таблицу, подобную первой форме нашего примера. Я хочу преобразовать этот запрос в качестве второй формы наших примеров.

ST.TRCODE - это столбец «Type» в нашем примере. Как я могу сгруппировать товары по критерию «Суммарная функция», как я упоминал выше?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020
select ProductName, 
  sum(case when type in ('7', '8') then 1 when type in ('2', '3') then -1 end * Amount) AS Amount
from MyTable
group by ProductName

Результаты

ProductName Amount
ProductA    20
ProductB    10
ProductC    10
0 голосов
/ 03 февраля 2020

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

select t.ProductName, 
       sum(case when type in (7, 8) then amount when type in (2, 3) then -amount end) as Amount
from table t
group by ProductName;
...