[英]get records from child table having count greater than 0 in sql server
[英]Get all records having count from one table is greater than sum of other table
我有三个表 1) CustomerOrders ,2) StockItems和 3) OrderContentsLine 。 StockItems
具有customerorderid
(与CustomerOrders
一对多关系)并且OrderContentsLine
包含具有项目数量的订单项目(显然与CustomerOrders
一对多关系)。
现在我想从OrderContentsLine
表中获取数量总和大于StockItems
数量的所有订单
我的查询看起来像这样
select co.OrderNumber,si.SalesOrderID, sum(ocl.Quantity) Ordered, count(si.SalesOrderID) Allocated from CustomerOrders co
inner join StockItems si on co.OrderID = si.SalesOrderID
inner join OrderContentsLine ocl on ocl.OrderID=co.OrderID
where co.CompanyId=531
group by si.SalesOrderID,co.OrderNumber
having count(si.SalesOrderID)>sum(ocl.Quantity)
但是这个查询没有显示任何结果,而且我很确定许多订单的订单上下文项大于 StockItems 表中的数量总和。
您能否查看我的查询并建议获得这些订单的更好方法!
我需要的输出是
注意:此输出不是由查询生成的!
我刚刚创建了一个查询,它为我提供了所需的输出
select * from(
select co.OrderNumber, co.OrderID, co.OrderStatus,
(select sum(tbl.Quantity) from OrderContentsLine tbl where tbl.OrderID=co.OrderID) Ordered,
(select count(*) from StockItems tbl2 where tbl2.SalesOrderID=co.OrderID ) Allocated
from CustomerOrders co
)temp where temp.Allocated> temp.Ordered
您的问题是多个一对多连接。 您正在对重复项进行计数和求和。 例如,如果您有 1 个包含 2 个库存项目的订单和 3 个订单行,则三个表的连接将有 6 行。 您在 StockItem 和 OrderContentsLine 之间没有关系,因此您得到一个笛卡尔积。
你可能想要类似的东西
WITH ord AS
(
SELECT co.CompanyId, co.OrderID, co.OrderNumber, SUM(ocl.Quantity) AS Ordered
FROM CustomerOrders co
INNER JOIN OrderContentsLine ocl ON ocl.OrderID = co.OrderID
GROUP BY co.CompanyId, co.OrderNumber
), al AS
(
SELECT co.CompanyId, co.OrderID, co.OrderNumber, COUNT(si.SalesOrderID) AS Allocated
FROM CustomerOrders co
INNER JOIN StockItems si ON co.OrderID = si.SalesOrderID
GROUP BY co.CompanyId, co.OrderNumber
)
SELECT ord.CompanyId, ord.OrderNumber, ord.Ordered, al.Allocated
FROM ord
INNER JOIN al ON ord.OrderID = al.OrderID
WHERE companyId = 531
AND al.Allocated > ord.Ordered
显然很难在没有数据的情况下进行测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.