我有以下表結構。複雜的外部連接條件
邏輯:如果一個工廠部件編號組合,SumQty如果在@MHL表中有一個條目,則應該進行檢驗。
- 我需要列出廠 「11」 和值和 「DEF」 部分號碼組合,我需要列出的總和爲50
CODE
DECLARE @MHL TABLE (LineNumber VarCHAR(5), PartNumber VARCHAR(10), Qty INT)
INSERT INTO @MHL VALUES ('10001','ABC',10)
INSERT INTO @MHL VALUES ('10002','ABC',100)
INSERT INTO @MHL VALUES ('10003','DEF',50)
INSERT INTO @MHL VALUES ('10005','KXY',25)
INSERT INTO @MHL VALUES ('10006','KXY',30)
DECLARE @MHP TABLE (PlantCode VarCHAR(5), LineNumber VARCHAR(5))
INSERT INTO @MHP VALUES ('20','10001')
INSERT INTO @MHP VALUES ('21','10002')
INSERT INTO @MHP VALUES ('80','10005')
INSERT INTO @MHP VALUES ('80','10006')
DECLARE @MasterPLantParts TABLE (PlantCode VarCHAR(5), PartNumber VARCHAR(10))
INSERT INTO @MasterPLantParts VALUES ('20','ABC')
INSERT INTO @MasterPLantParts VALUES ('21','ABC')
INSERT INTO @MasterPLantParts VALUES ('96','ABC')
INSERT INTO @MasterPLantParts VALUES ('11','DEF')
INSERT INTO @MasterPLantParts VALUES ('80','KXY')
SELECT M.PlantCode,M.PartNumber,SumQty
FROM @MasterPLantParts M
LEFT OUTER JOIN
(SELECT PartNumber, PlantCode, SUM(Qty) SumQty
FROM @MHL H
LEFT OUTER JOIN @MHP p
on P.LineNumber = H.LineNumber
GROUP BY PartNumber, PlantCode
)T
ON T.PartNumber = M.PartNumber
AND T.PlantCode = M.PlantCode
CURRENT RESULT
預期的結果
問題
的QtySum 「50」 現在不來了。如何在SQL Server 2005中做到這一點?如果該方法可以在Oracle 8i中運行,那也是很好的
注意:即使@MHP中沒有記錄,我也需要從@MHL中獲得總和。但是,如果@MHP中有一個值,請從@MHP獲取關聯值,@MHL關係
你能解釋一下邏輯嗎?爲什麼「11」和「DEF」是50,而「96」和「ABC」是0? – cha
如果執行以下語句,DEF的值將會出現:'INSERT INTO @MHP VALUES('11','10003')' – cha
@cha是正確的,你在PlantCode和LineNumber之間沒有關係,所以沒有辦法通過任何連接讓SQL獲得Part/Qty,除非以QTY開始並解決,否則PlantCode將爲NULL。 – JiggsJedi