Дублирование вызывается в представлении SQL Server - PullRequest
0 голосов
/ 16 марта 2019

Я унаследовал запрос, который был сделан предыдущим разработчиком, и он связывает около 6 таблиц с левыми объединениями, и я получаю дублирующие данные по какой-то причине, когда строка добавляется в таблицу Paliized, фактически дублирующую 2 строки, которая вроде как, и я не могу понять это

Я использую Microsoft SQL Server 2014 на случай, если что-то изменится

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
    ProductionPlan pp 
LEFT JOIN
    ProductionPlanItem ppi ON pp.ProductionPlanID = ppi.ProductionPlanID   
LEFT JOIN
    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
    ProductionPlanBatch bat ON ppi.ProductionPlanBatchID = bat.ProductionPlanBatchID 
LEFT JOIN
    Boxed boxed ON sopLine.SOPOrderReturnLineID = boxed.SopItemLineID 
                AND pp.ProductionPlanID = boxed.ProductionPlanID 
LEFT JOIN
    Palletized palletized ON sopLine.SOPOrderReturnLineID = palletized.SopItemLineID 
                          AND pp.ProductionPlanID = palletized.ProductionPlanID 
CROSS APPLY 
    (SELECT 1 FROM master..spt_values v
     WHERE v.type = 'P' 
       AND v.number < ISNULL(boxed.QtyBoxed, 0) - ISNULL(palletized.QtyOnPallet, 0)) o(Quantity)
WHERE
    ProductionPlanID = 5801244

В основном то, что происходит в программном обеспечении, они удаляют строку из штучной упаковки и помещают строку в таблицу Palletized, но из таблицы с сортировкой в ​​этом представлении появляются две строки в таблице блоков, когда этого не должно быть.

Мое главное недоразумение - это строка кода.

CROSS APPLY (SELECT 1
             FROM master..spt_values v
             WHERE v.type = 'P' 
               AND v.number < ISNULL(boxed.QtyBoxed, 0) - ISNULL(palletized.QtyOnPallet, 0)) o (Quantity)

Я никогда раньше не видел таблицу spt.values, и я не уверен, что именно она делает. Я не могу предоставить данные с помощью этого запроса, но я полагаю, что некоторые DBA могут помочь мне понять, откуда происходит дублирование.

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