2016-02-29 114 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 
    .    . 
    .    . 
    .    . 

我基本上希望有显示的产品编号,表(库存 - 附表)AS XSStock和成本这样的...

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

我想这可能是UNION或子查询,但我不能似乎使任何工作?

我最近才开始使用SQL,所以如果你能解释你的反应会很棒!

KATIA编辑查询:

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

在一个侧面说明...的顶部查询仍显示库存= 0的结果,我该如何解决这个问题? –

+1

给我们两个原始查询的一些示例结果,并向我们展示组合查询的预期结果! – jarlh

+0

或 (Products.ProductId LIKE'ASY%')可能是什么导致您的查询返回值,即使库存为0. –

回答

1

你也可以尝试走样查询和选择他们在选择查询

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

谢谢Katia!我设法使用这种方法得到它的工作:) –

+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