2016-02-29 5 views
0

Мне нужно объединить две следующие запросы ...Как объединить два запроса?

SELECT  Products.ProductId, Products.ProductDescription, SUM(Inventory.QuantityOutstanding) AS Inventory, Products.AverageCost AS Cost 

FROM   Products INNER JOIN 
        Inventory ON Products.Product = Inventory.Product 
WHERE (Inventory > 0) AND (Products.ProductId LIKE 'CAS%') OR 
        (Products.ProductId LIKE 'ASY%') 
GROUP BY Products.ProductId, Products.ProductDescription, Products.AverageCost 
ORDER BY Products.ProductId 

Что дает таблицу как ...

ProductID ProductDescription Inventory Cost 
------------------------------------------------------- 
    AB   CD     0???  0 
    UV   XY     5  555 
    .    .      .   . 
    .    .      .   . 
    .    .      .   . 

И

SELECT Components.ProductId, SUM(SalesOrderItems.QuantityOutstanding) AS Schedule 

FROM Structures INNER JOIN 
Products AS Components ON Structures.Component = Components.Product INNER JOIN 
Products AS Products ON Products.Product = Structures.Product AND 
Structures.StructureVersion = Products.StructureVersion LEFT OUTER JOIN 
SalesOrders INNER JOIN 
SalesOrderItems ON SalesOrders.SalesOrder = SalesOrderItems.SalesOrder ON 
Products.Product = SalesOrderItems.Product 


WHERE  ((Components.ProductId LIKE 'CAS%') OR (Components.ProductId LIKE 'ASY%')) AND (SalesOrderItems.DueDate < DATEADD(m, 3, GETDATE())) AND (SalesOrderItems.QuantityOutstanding > 0) 
GROUP BY Components.ProductId, Products.ProductId 
ORDER BY Components.ProductId 

Что дает таблица вроде .. .

ProductId  Schedule 
------------------------- 
    AB    360 
    UV    3 
    .    . 
    .    . 
    .    . 

Я в принципе хочу иметь таблицу, которая отображает ProductId (Inventory - Schedule) AS XSStock, и затрат, как это ...

ProductId XSStock (>0 only) Cost 
------------------------------------------- 
    UV    2    222 
    .    .     . 
    .    .     . 
    .    .     . 

Я думал, что это может быть UNION или подзапросов, но я не могу похоже, что они работают?

Я только недавно начал использовать SQL, поэтому, если бы вы могли объяснить свой ответ, это было бы здорово!

KATIA EDIT QUERY:

SELECT ProductId, ProductDescription, Inventory, Cost, SUM(Orders) AS Demand, (Inventory - SUM(Orders)) AS XSStock 

FROM (SELECT X.ProductId, X.ProductDescription, X.Inventory, X.Cost, SUM(Y.Schedule) AS Orders 

    FROM (SELECT  Products.ProductId, Products.ProductDescription, SUM(Inventory.QuantityOutstanding) AS Inventory, Products.AverageCost AS Cost 

     FROM   Products INNER JOIN 
          Inventory ON Products.Product = Inventory.Product 
     WHERE  (Products.ProductId LIKE 'CAS%') OR 
          (Products.ProductId LIKE 'ASY%') 
     GROUP BY Products.ProductId, Products.ProductDescription, Products.AverageCost) AS X, 

    (SELECT Components.ProductId, SUM(SalesOrderItems.QuantityOutstanding) AS Schedule 

     FROM Structures INNER JOIN 
     Products AS Components ON Structures.Component = Components.Product INNER JOIN 
     Products AS Products ON Products.Product = Structures.Product AND 
     Structures.StructureVersion = Products.StructureVersion LEFT OUTER JOIN 
       SalesOrders INNER JOIN 
     SalesOrderItems ON SalesOrders.SalesOrder = SalesOrderItems.SalesOrder ON 
     Products.Product = SalesOrderItems.Product 

    WHERE  ((Components.ProductId LIKE 'CAS%') OR (Components.ProductId LIKE 'ASY%')) AND (SalesOrderItems.DueDate < DATEADD(m, 3, GETDATE())) AND (SalesOrderItems.QuantityOutstanding > 0) 
    GROUP BY Components.ProductId, Products.ProductId) AS Y 


WHERE (Y.ProductId LIKE X.ProductId) 
GROUP BY X.ProductId, X.ProductDescription, X.Inventory, X.Cost) 

WHERE ((Inventory - SUM(Orders)) > 0) 
GROUP BY ProductId, ProductDescription, Inventory, Cost 

ORDER BY ProductId 

Сейчас я получаю сообщение об ошибке ...

Incorrect syntax near the keyword 'WHERE' 

Это в строке 30, но я не знаю, почему?

+0

На стороне записки ... The верхний запрос по-прежнему отображает результаты, где Inventory = 0, как я могу это исправить? –

+1

Дайте нам образец результата для двух исходных запросов и покажите нам ожидаемый результат для комбинированного запроса! – jarlh

+0

OR (Products.ProductId LIKE 'ASY%'), вероятно, является причиной того, что ваш запрос возвращает значение, даже если инвентарь равен 0. –

ответ

1

Также вы можете попробовать альясинга как запрос и выбор их в запросе на выборку

SELECT x.a, y.b FROM (SELECT * from a) as x, (SELECT * FROM b) as y 
+0

Спасибо Катя! Мне удалось заставить его работать с помощью этого метода :) –

+0

Рад это слышать!) – Katia

+0

Жаль, что это боль Катя, но можете ли вы помочь в последний раз по моему обновленному вопросу? Это так близко к работе, но я не знаю, где синтаксическая ошибка сейчас! –

0

Чтобы исправить Inventory = 0 вам просто нужно добавить скобки здесь:

`(Inventory > 0) AND *((Products.ProductId LIKE 'CAS%') OR (Products.ProductId LIKE 'ASY%'))` 

О запросе: почему вы не хотите, чтобы сделать выбор из продуктов и присоединиться там все? У вас есть ProductsId во всех таблицах. Я пытался объединить его в единое целое, может быть, это поможет вам:

SELECT  Products.ProductId, Products.ProductDescription, SUM(Inventory.QuantityOutstanding) AS Inventory, Products.AverageCost AS Cost 
SUM(SalesOrderItems.QuantityOutstanding) AS Schedule 
from Products 

inner join Inventory ON Products.Product = Inventory.Product 
inner join structures AS Components ON Structures.Component = Products.Product INNER JOIN 
inner join structurs as structures.Product = Product.Product and 
Structures.StructureVersion = Products.StructureVersion 
LEFT OUTER JOIN 
SalesOrders INNER JOIN SalesOrderItems ON SalesOrders.SalesOrder = SalesOrderItems.SalesOrder ON 
Products.Product = SalesOrderItems.Product 
WHERE (Inventory > 0) AND ((Products.ProductId LIKE 'CAS%') OR (Products.ProductId LIKE 'ASY%')) 
and ((Products.ProductId LIKE 'CAS%') OR (Products.ProductId LIKE 'ASY%')) 
AND (SalesOrderItems.DueDate < DATEADD(m, 3, GETDATE())) AND (SalesOrderItems.QuantityOutstanding > 0) 

GROUP BY Products.ProductId, Products.ProductDescription, Products.AverageCost 
ORDER BY Products.ProductId 
+0

Так это сработало для вас? – Katia

+0

Я попробовал это, и, пожалуйста, просмотрите мой обновленный вопрос, поскольку у меня закончились символы здесь, в разделе комментариев lol –

+0

Это была моя ошибка, вам нужно: Component.Component = Products.Product – Katia

Смежные вопросы