#sql #database #tsql
#sql #База данных #tsql
Вопрос:
У меня есть 3 запроса, которые я хочу объединить. 1 запрос для общего объема продаж, 1 для отмененных заказов и 1 для заказов, которые не включают определенные типы продуктов. Просто нужно, чтобы общие продажи $ $ выводились в табличном формате, как сейчас. Единственное, что меняется между 3-мя, — это оператор where. Спасибо!
Редактировать: я понимаю, что я сказал «Просто нужен общий объем продаж $ $»… я имел в виду, что мне просто нужны sales $ $ для каждого запроса в одной таблице. Итак, $ x, $ y, $ z … x — это общий объем продаж, y — это отмененные доллары продаж, а z — это доллары продаж для конкретных товаров.
SELECT Sum((Items.Total Items.Shipping)*OrderDetails.Quantity) AS Total
FROM Promo INNER JOIN (Orders INNER JOIN (Items INNER JOIN OrderDetails ON Items.ItemCode = OrderDetails.ItemCode) ON Orders.OrderNumber = OrderDetails.OrderNumber) ON Promo.Promo = Orders.Promo
WHERE ((Promo.OfferType)='Sale') AND ((Items.Date) Between '6/1/2010' And '12/31/2011');
SELECT Sum((Items.Total Items.Shipping)*OrderDetails.Quantity) AS Canceled
FROM Promo INNER JOIN (Orders INNER JOIN (Items INNER JOIN OrderDetails ON Items.ItemCode = OrderDetails.ItemCode) ON Orders.OrderNumber = OrderDetails.OrderNumber) ON Promo.Promo = Orders.Promo
WHERE (((Promo.OfferType)='Sale') AND ((Items.Date) Between '6/1/2010' And '12/31/2011') AND ((Items.Status)="Canceled"));
SELECT Sum((Items.Total Items.Shipping)*OrderDetails.Quantity) AS BadItems
FROM Promo INNER JOIN (Orders INNER JOIN (Items INNER JOIN OrderDetails ON Items.ItemCode = OrderDetails.ItemCode) ON Orders.OrderNumber = OrderDetails.OrderNumber) ON Promo.Promo = Orders.Promo
WHERE (((Promo.OfferType)='Sale') AND ((Items.Date) Between '6/1/2010' And '12/31/2011') AND ((Items.ProductType)<>2) AND ((Items.ProductType)<>6));
Спасибо!
Ответ №1:
Если вы хотите получить результаты в 1 строке:
SELECT Total, Canceled, BadItems
FROM Query1, Query2, Query3
И если вы хотите получить результаты в 1 столбце, используйте UNION
:
Query1
UNION
Query2
UNION
Query3
Ответ №2:
Обновлено, чтобы отразить разъяснение вопроса:
SELECT Sum(CASE WHEN Items.Status <> 'Canceled' AND Items.ProductType = 4 THEN (Items.Total Items.Shipping)*OrderDetails.Quantity ELSE 0 END) AS Total ,
Sum(CASE WHEN Items.Status = 'Canceled' AND Items.ProductType = 4 THEN (Items.Total Items.Shipping)*OrderDetails.Quantity ELSE 0 END) AS Canceled,
Sum(CASE WHEN Items.ProductType <> 4 THEN (Items.Total Items.Shipping)*OrderDetails.Quantity ELSE 0 END) AS BadItems,
FROM Promo INNER JOIN (Orders INNER JOIN (Items INNER JOIN OrderDetails ON Items.ItemCode = OrderDetails.ItemCode) ON Orders.OrderNumber = OrderDetails.OrderNumber) ON Promo.Promo = Orders.Promo
WHERE ((Promo.OfferType)='Sale') AND ((Items.Date) Between '9/1/2010' And '12/31/2010');
Комментарии:
1. Внес правку, мне было неясно, чего я хотел. Я хочу, чтобы все 3 значения были в одной таблице… таким образом, необходимо объединить 3 запроса, чтобы предоставить все 3 значения.
Ответ №3:
попробуйте использовать процедуру, которая будет принимать три значения в качестве входных данных, которые будут соответствовать вашим операторам were, и это даст результаты в одной таблице, как хотите. если вы застряли, дайте мне знать, я помогу.