Удаление условий таблицы Tally, приводящих к некорректности Lineqty - PullRequest
0 голосов
/ 21 октября 2018

Привет, ребята. У меня есть этот сохраненный процесс, использующий таблицу подсчета, но когда я удалил код и попытался создать вычисляемый столбец, чтобы добиться того же, он испортил программу, как вы видите здесь, в столбце строки qty есть 1что он должен делать, получая этот кол-во из таблицы подсчета, но когда я удалил этот код во второй хранимой процедуре, перечисленной ниже.

Основная проблема, которую я вижу, как вы видите, заключается в том, что строка qty отображается как нольв настоящее время.

SELECT        pp.ProductionPlanID, pp.WeekStartDate, pp.WeekEndDate, ppi.ProductionPlanItemID, ppi.SOPOrderReturnLineID, bat.ProductionPlanBatchID, sop.DocumentNo, cust.CustomerAccountName, 
                         bat.Name AS BatchName, si.ItemID, si.Code AS StockCode, si.Name AS StockName, sopLine.AllocatedQuantity, o.Quantity AS LineQty
FROM            FUEL_ProductionPlan pp LEFT JOIN
                         FUEL_ProductionPlanItem ppi ON pp.ProductionPlanID = ppi.ProductionPlanID LEFT JOIN
                         FUEL_ProductionPlanBatch ppb ON ppi.ProductionPlanBatchID = ppb.ProductionPlanBatchID LEFT JOIN
                         SOPOrderReturnLine sopLine ON ppi.SOPOrderReturnLineID = sopLine.SOPOrderReturnLineID LEFT JOIN
                         SOPOrderReturn sop ON sopLine.SOPOrderReturnID = sop.SOPOrderReturnID LEFT JOIN
                         SLCustomerAccount cust ON sop.CustomerID = cust.SLCustomerAccountID LEFT JOIN
                         StockItem si ON sopLine.ItemCode = si.Code LEFT JOIN
                         FUEL_ProductionPlanBatch bat ON ppi.ProductionPlanBatchID = bat.ProductionPlanBatchID LEFT JOIN
                         FUEL_Boxed boxed ON sopLine.SOPOrderReturnLineID = boxed.SopItemLineID AND pp.ProductionPlanID = boxed.ProductionPlanID CROSS APPLY
                             (SELECT        1
                               FROM            master..spt_values v
                               WHERE        v.type = 'P' AND v.number < (sopLine.AllocatedQuantity - ISNULL(boxed.QtyBoxed, 0))) o(Quantity)
WHERE        sopLine.AllocatedQuantity > 0

Этот код вызывает проблему здесь.

(SELECT        1
FROM            master..spt_values v
WHERE        v.type = 'P' AND v.number < (sopLine.AllocatedQuantity - > 
  ISNULL(boxed.QtyBoxed, 0)))
 o(Quantity)

enter image description here

Как вы можетевидите, здесь правильно выводится строка qty.

Это мой измененный запрос, который, как я думал, будет выполнять то же самое, что и таблица разбиения, но это не так, и это вызывает проблемы.

SELECT        pp.ProductionPlanID, pp.WeekStartDate, pp.WeekEndDate, ppi.ProductionPlanItemID, ppi.SOPOrderReturnLineID, bat.ProductionPlanBatchID, sop.DocumentNo, 
                         cust.CustomerAccountName, bat.Name AS BatchName, si.ItemID, si.Code AS StockCode, si.Name AS StockName, sopLine.AllocatedQuantity, boxed.QtyBoxed, 
                         ISNULL(sopLine.AllocatedQuantity - boxed.QtyBoxed, 0) AS LineQty
FROM            dbo.FUEL_ProductionPlan AS pp LEFT OUTER JOIN
                         dbo.FUEL_ProductionPlanItem AS ppi ON pp.ProductionPlanID = ppi.ProductionPlanID LEFT OUTER JOIN
                         dbo.FUEL_ProductionPlanBatch AS ppb ON ppi.ProductionPlanBatchID = ppb.ProductionPlanBatchID LEFT OUTER JOIN
                         dbo.SOPOrderReturnLine AS sopLine ON ppi.SOPOrderReturnLineID = sopLine.SOPOrderReturnLineID LEFT OUTER JOIN
                         dbo.SOPOrderReturn AS sop ON sopLine.SOPOrderReturnID = sop.SOPOrderReturnID LEFT OUTER JOIN
                         dbo.SLCustomerAccount AS cust ON sop.CustomerID = cust.SLCustomerAccountID LEFT OUTER JOIN
                         dbo.StockItem AS si ON sopLine.ItemCode = si.Code LEFT OUTER JOIN
                         dbo.FUEL_ProductionPlanBatch AS bat ON ppi.ProductionPlanBatchID = bat.ProductionPlanBatchID LEFT OUTER JOIN
                         dbo.FUEL_Boxed AS boxed ON sopLine.SOPOrderReturnLineID = boxed.SopItemLineID AND pp.ProductionPlanID = boxed.ProductionPlanID
WHERE        (sopLine.AllocatedQuantity > 0)

Это код, который я заменил на него, хотя мне бы этого было достаточно, но, очевидно, его нет.

 ISNULL(sopLine.AllocatedQuantity - boxed.QtyBoxed, 0) AS LineQty

enter image description here

Пожалуйста, извинитемое невежество в таблице учета у меня невИз-за того, что я использовал один в моей жизни, проблема в том, что некоторые продукты не появляются в наборе результатов, и мы пытаемся понять, почему это ошибка старого программиста, которого у нас больше нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...