Как можно объединить эти 3 оператора T-SQL в одно? - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть 3 запроса, которые я хочу объединить. 1 запрос для общего объема продаж, 1 для отмененных заказов и 1 для заказов, которые не включают в себя определенные типы продуктов. Просто нужно, чтобы общий объем продаж $$ выводился в табличном формате, как сейчас. Единственное, что меняется между 3 - это оператор where. Спасибо!

Редактировать: я понимаю, что сказал: «Мне нужен общий объем продаж $$» ... я имел в виду, что мне просто нужен $$ продаж для каждого запроса в одной таблице. Таким образом, $ 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));

Спасибо!

Ответы [ 3 ]

0 голосов
/ 07 ноября 2011

Если вы хотите, чтобы результаты в 1 строке:

SELECT Total, Canceled, BadItems
FROM Query1, Query2, Query3

А если вы хотите получить результаты в 1 столбце, используйте UNION:

Query1
UNION
Query2
UNION
Query3
0 голосов
/ 07 ноября 2011

попробуйте использовать процедуру, которая будет принимать три значения в качестве входных данных, которые будут соответствовать вашим утверждениям, и будет давать результаты в одной таблице как угодно.если вы застряли, дайте мне знать, я помогу.

0 голосов
/ 07 ноября 2011

Обновлено, чтобы отразить уточнение вопроса:

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...