如何合并两个查询?
How to combine two queries?
我需要合并以下两个查询...
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
这给了一个 table 喜欢...
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
这给了一个 table 喜欢...
ProductId Schedule
-------------------------
AB 360
UV 3
. .
. .
. .
我基本上想要一个 table 来显示 ProductId、(库存 - 计划)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 行,但我不知道为什么?
要修复 Inventory = 0
,您只需在此处添加方括号:
`(Inventory > 0) AND *((Products.ProductId LIKE 'CAS%') OR (Products.ProductId LIKE 'ASY%'))`
关于查询:为什么你不想从Products中选择并加入那里的所有东西?您在所有表中都有 ProductId。我试着把它合二为一,也许对你有帮助:
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
您也可以尝试在 select 查询
中为查询和选择它们设置别名
SELECT x.a, y.b FROM (SELECT * from a) as x, (SELECT * FROM b) as y
我需要合并以下两个查询...
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
这给了一个 table 喜欢...
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
这给了一个 table 喜欢...
ProductId Schedule
-------------------------
AB 360
UV 3
. .
. .
. .
我基本上想要一个 table 来显示 ProductId、(库存 - 计划)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 行,但我不知道为什么?
要修复 Inventory = 0
,您只需在此处添加方括号:
`(Inventory > 0) AND *((Products.ProductId LIKE 'CAS%') OR (Products.ProductId LIKE 'ASY%'))`
关于查询:为什么你不想从Products中选择并加入那里的所有东西?您在所有表中都有 ProductId。我试着把它合二为一,也许对你有帮助:
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
您也可以尝试在 select 查询
中为查询和选择它们设置别名SELECT x.a, y.b FROM (SELECT * from a) as x, (SELECT * FROM b) as y