簡體   English   中英

如何使用左聯接從主表中獲取所有數據?

[英]How to use left join to take all data from master table?

我如何從EmniyetStok獲取所有數據。 例如,EmniyetStok有1000行,而其他表有200行。 下面的查詢返回給我200行。 但是我想把所有的emniyetstok(全部1000行)。 我使用了左聯接(對於EmniyetStok),但是它不會起作用。 我想拿Emniyetstok(主表)的所有行。 如果t.Quantity為null或為空,則在查詢表達式末尾,它應該為零。

請不要刪除:我之后需要{0}的Clouse。 在where之后,它應該返回1000行。 “我將添加“ e.CustomerID ='0061004287'和t.SapContractNumber ='3120012161'”。

SELECT 
s.MaterialNumber, 
sum(s.Stock) Stock,
dbo.getSapContractNumberBySapDeliveryNumber(s.SapDeliveryNumber) SapContractNumber,
s.BillTo,
s.Quantity
INTO #tmp
FROM Stok s
GROUP BY s.MaterialNumber, s.SapDeliveryNumber, s.BillTo, s.Quantity
-----------------------


-----------------------
SELECT
e.SapContractNumber [Anlaşma No],
c.ContractName [Anlaşma Adı],
e.CustomerId [Müşteri No],
cu.CustomerFullName [Müşteri Adı],
e.MaterialNumber [Ürün No],
sc.MaterialName [Ürün],
convert(decimal(10,2),avg(EmniyetStok)) [Emniyet Stok],
convert(decimal(10,2),avg(OrtalamaStok)) [OrtalamaStok],
convert(decimal(10,2),sum(Stock)) Stok,
convert(decimal(10,2),avg(e.ortalamastok) - sum(t.Quantity)) SiparisOnerisi
FROM EmniyetStok e
LEFT JOIN #tmp t 
ON t.MaterialNumber = e.MaterialNumber 
AND t.SapContractNumber = e.SapContractNumber 
AND e.CustomerID = t.BillTo 
LEFT JOIN Contracts c ON c.SAPContractNumber = e.SapContractNumber
LEFT JOIN Customers cu ON cu.CustomerID = e.CustomerID
LEFT JOIN StockCards sc ON sc.MaterialNumber = e.MaterialNumber
WHERE {0} 
GROUP BY 
e.SapContractNumber,
c.ContractName,
e.CustomerId,
cu.CustomerFullName,
e.MaterialNumber,
sc.MaterialName
HAVING sum(t.Quantity) < avg(e.ortalamastok) 

DROP TABLE #tmp

您的問題出在字符串中:

HAVING sum(t.Quantity) < avg(e.ortalamastok)

當t.Quantity為空或e.ortalamastok為空時,您將丟失記錄。 糾正並檢查:

HAVING sum(ISNULL(t.Quantity,0))<avg(ISNULL(e.ortalamastok,0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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