У меня есть запрос на отображение, который по существу показывает запас на складе, на заказ и на резерв. Все в порядке с одной стороны - сумма веса и количества возвращает удвоенные результаты (только в случае, если какая-то сумма находится на заказ). Я уверен, что я наполнил свои соединения, но я не могу понять, как это сделать.SQL OUTER JOIN сумма столбца, возвращающая в два раза сумму
Выходной ток (с удвоенной суммой):
PartNo Branch SOHWeight SOHQty ReservedQty SOOEa SOOTo AvgCost type product grade coating finish thickness width length dim1 dim2 Notes ClassFBR ClassFME ClassFSY AltoQty
-------------------------- ------ --------- ------ ----------- ----- ----- ------- ---- ------- ----- ------- ------ --------- ----- ------ ---- ---- -----
B-254-304---5--40-40-6000 FME 0.33 18 NULL NULL 1.5 68.7494 B ANGLE-E 304 NULL 5 NULL 6000 40 40 NULL C A B NULL
Warning: Null value is eliminated by an aggregate or other SET operation.
Ожидаемый результат точно такой же, за исключением того, что SOHWeight и SOHQty должны быть в два раза (по сравнению с токовым выходом)
Примечания:
- StockOnHand будет иметь много PackNoID с тем же ProductDesc (Part #)
- Может быть несколько резервирований против того же PackNoID
SELECT dbo.tblProducts.PartNo,
'FME' AS Branch,
SUM(sOh.Weight) AS SOHWeight,
SUM(sOh.Quantity) AS SOHQty,
SUM(dbo.tblReserveDetail.Quantity) AS ReservedQty,
SUM(iif(dbo.tblPurchaseOrderDetail.QuantityUnit = 'TO', NULL, dbo.tblPurchaseOrderDetail.QuantityAmount)) AS SOOEa,
SUM(iif(dbo.tblPurchaseOrderDetail.QuantityUnit = 'TO', dbo.tblPurchaseOrderDetail.QuantityAmount, NULL)) AS SOOTo,
SUM(IIF(SoH.TYPE IN ('C', 'SC'), SoH.COST * SoH.WEIGHT, SoH.COST * SoH.QUANTITY) + PROCESSINGCOST + PROCESSINGFREIGHT + Packaging)/SUM(IIF(SoH.TYPE IN ('C', 'SC'), sOh.weight, sOh.Quantity)) AS AvgCost,
tblProducts.type,
tblProducts.product,
tblProducts.grade,
tblProducts.coating,
tblProducts.finish,
tblProducts.thickness,
tblProducts.width,
tblProducts.length,
tblProducts.dim1,
tblProducts.dim2,
tblProducts.Notes,
tblProducts.ClassFBR,
tblProducts.ClassFME,
tblProducts.ClassFSY,
SUM(IIF(SoH.STATUS = 'SC', SoH.QUANTITY, NULL)) AS AltoQty
FROM DBO.tblProducts
LEFT OUTER JOIN dbo.tblStockOnHand SoH
ON tblProducts.PartNo = SOH.ProductDesc
AND SoH.Status IN ('I', 'R', 'SC')
AND SoH.branch = 'FME'
LEFT OUTER JOIN dbo.tblReserveDetail
RIGHT OUTER JOIN dbo.tblReserveHeader
ON dbo.tblReserveHeader.ID = dbo.tblReserveDetail.ReserveID
AND tblReserveHeader.Completed = 0
AND tblReserveHeader.Cancelled = 0
ON SOH.PACKNOID = tblReserveDetail.PacknoID
LEFT OUTER JOIN tblPurchaseOrderDetail
ON dbo.tblPurchaseOrderDetail.ProductDesc = dbo.tblProducts.PartNo
AND (dbo.tblPurchaseOrderDetail.Status = N'O'
OR dbo.tblPurchaseOrderDetail.Status = N'PD')
AND tblPurchaseOrderDetail.branch = 'FME'
GROUP BY dbo.tblProducts.PartNo,
tblProducts.type,
tblProducts.product,
tblProducts.grade,
tblProducts.coating,
tblProducts.finish,
tblProducts.thickness,
tblProducts.width,
tblProducts.length,
tblProducts.dim1,
tblProducts.dim2,
tblProducts.Notes,
tblProducts.ClassFBR,
tblProducts.ClassFME,
tblProducts.ClassFSY
Выборочные данные (урезанная): tblStockOnHand:
PackNoID Status Weight Quantity Cost ProcessingCost ProcessingFreight Packaging Branch tblstockonhand.ProductDesc
157220 I 0.165 9 $68.47 $0.00 $2.48 $0.00 FME B-254-304---5--40-40-6000
158620 I 0.01839825 1 $64.27 $0.00 $4.72 $0.00 FSY B-254-304---5--40-40-6000
tblPurchaseOrderDetail
RecordId Status OrderNumber ItemNumber QuantityAmount QuantityUnit PriceQuantity PriceUnit Branch ProductDesc
6976 FD 4441 18 0.25 TO 3790 TO FBR B-254-304---5--40-40-6000
6936 O 4439 23 0.5 TO 3790 TO FME B-254-304---5--40-40-6000
6912 FD 4437 1 20 EA 75.96 EA FSY B-254-304---5--40-40-6000
tblPurchaseOrderHeader
Status OrderNumber Branch
O 4439 FME
tblProducts
PartNo ClassFBR ClassFME ClassFSY Notes Type Product Grade Finish Coating Thickness Width Length Dim1 Dim2
B-254-304---5--40-40-6000 C A B B ANGLE-E 304 5 6000 40 40
пожалуйста, напишите некоторые примеры данных и ожидаемый результат – Squirrel
Отредактировано OP, чтобы показать выборочные данные и ожидаемый результат @Squirrel – JCro