[英]LEFT JOIN to take all rows from left table irrespective of join condition
[英]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.