簡體   English   中英

獲取一個表中計數大於另一表總和的所有記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM