Вычисление общего количества в SQL с 2 разными кодами, заканчивающимися на `396` и `400`

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть запрос, который извлекает все продукты, которые имеют окончание в коде продукта с 396 и кратным requiredQty * 6 .

 SELECT p.description, SUM((requiredQty * 6)) AS singlePack 
    FROM SalesOrderLine sol 
        JOIN SalesOrder so ON sol.salesOrderID = so.id
        JOIN Product p on sol.productID = p.id
    WHERE p.code like '96'
GROUP BY p.description
;
 

Далее,

Мне нужно получить все коды, которые заканчиваются на 400 и умножить requiredQty * 10 .

Это будет выглядеть примерно так:

 SELECT p.description, SUM((requiredQty * 10)) AS singlePack 
    FROM SalesOrderLine sol 
        JOIN SalesOrder so ON sol.salesOrderID = so.id
        JOIN Product p on sol.productID = p.id
    WHERE p.code like '@0'
GROUP BY p.description
;
 

Как я могу теперь объединить 2 значения вместе, чтобы получить общую сумму для каждого продукта?

Это логика, стоящая за этим.

 requiredQty = requiredQty * 6 (Only for codes ending with `396`)

requiredQty = requiredQty * 10 (Only for codes ending with `400`)

add the 2 outputs together.


e.g.

36 = 6 * 6
50 = 5 * 10

total = 86
 

Ответ №1:

Используйте условную агрегацию:

 SELECT p.description,
       SUM(CASE WHEN p.code LIKE '@0' THEN requiredQty * 10
                WHEN p.code LIKE '96' THEN requiredQty * 6
                ELSE 0
           END) AS singlePack 
FROM SalesOrderLine sol JOIN 
     SalesOrder so
     ON sol.salesOrderID = so.id JOIn
     Product p 
     ON sol.productID = p.id
WHERE p.code like '@0' OR p.code LIKE '96'
GROUP BY p.description