#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