SQL-запрос для создания совпадения, в результате которого невозможно избежать дубликатов

#sql #duplicates #unique

#sql #дубликаты #уникальный

Вопрос:

Я создаю SQL-запрос для сопоставления промежуточной таблицы с таблицей Dynamics GP. Созданный мной запрос работает на 90% того, что мне нужно, за исключением случаев, когда номер элемента и строка # совпадают. В строках, таких как LNITMSEQ и BoeingInvNmbr, есть уникальные значения, такие как LNITMSEQ и BoeingInvNmbr, но я все еще не могу получить 2 строки против 4 строк, 2 из которых являются дубликатами. Строка # в одной из таблиц — X.X, и мне пришлось создать PATINDEX, чтобы удалить .X для соединения с PoLineNmbr .

Я пробовал DISTINCT, GROUP BY, используя CTE, разные объединения и т. Д. Без ожидаемого результата.

 SELECT A.SOPNUMBE
    ,A.SOPTYPE
    ,A.CUSTNMBR
    ,B.BoeingPONmbr
    ,A.CSTPONBR
    ,D.ITEMNMBR
    ,B.PartNmbr
    ,D.QUANTITY AS GPQTY
    ,D.QTYTOINV
    ,D.QTYFULFI
    ,B.Quantity AS BQTY
    ,b.BoeingInvoiceNmbr
    ,B.InvGrossAmt
    ,D.XTNDPRCE
    ,D.LNITMSEQ
    ,DENSE_RANK() OVER (
        ORDER BY A.SOPNUMBE ASC
        ) AS SOP_Rank
FROM ZSWIN..SOP10100 A
LEFT JOIN Integration..BoeingInvoices B ON A.CSTPONBR = B.BoeingPONmbr
LEFT JOIN ZSWIN.dbo.adv_SalesTransactionEntry_CPO C ON A.MSTRNUMB = C.MSTRNUMB
    AND SUBSTRING([Line #], PATINDEX('%[0-9]%', [Line #]), PATINDEX('%[0-9][^0-9]%', [Line #]   't') - PATINDEX('%[0-9]%', [Line #])   1) = B.POLineNmbr -- altered line# to remove .X
LEFT JOIN ZSWIN..SOP10200 D ON C.LNITMSEQ = D.LNITMSEQ
    AND A.SOPNUMBE = D.SOPNUMBE
WHERE A.SOPTYPE = 2
    AND D.QTYTOINV = D.QTYFULFI
    AND D.QTYTOINV = B.Quantity
    AND A.SOPNUMBE NOT IN (
        SELECT SOPNUMBE
        FROM GPBoeingMatch
        )
    AND b.BoeingPONmbr = '1561870' 


Expected Results:
DS-19027  2  BOEING  1561870  1561870  895-00008-0400  895-00008-0400  8  8  8  8  0009294850  632.00  632.00000  16384  1
DS-19027  2  BOEING  1561870  1561870  895-00008-0400  895-00008-0400  8  8  8  8  0009453604  632.00  632.00000  32768  1 

Actual Results:
DS-19027  2  BOEING  1561870  1561870  895-00008-0400  895-00008-0400  8  8  8  8  0009294850  632.00  632.00000  16384  1
DS-19027  2  BOEING  1561870  1561870  895-00008-0400  895-00008-0400  8  8  8  8  0009453604  632.00  632.00000  32768  1
DS-19027  2  BOEING  1561870  1561870  895-00008-0400  895-00008-0400  8  8  8  8  0009294850  632.00  632.00000  16384  1
DS-19027  2  BOEING  1561870  1561870  895-00008-0400  895-00008-0400  8  8  8  8  0009453604  632.00  632.00000  32768  1
  

Комментарии:

1. Не могли бы вы предоставить некоторые примеры данных? DISTINCT должно работать.

2. distinct — единственное решение!!!!

3. @D-Shih Образец данных о том, что находится во всех трех таблицах? Например, вставка / значения для каждого из них для этого конкретного примера…

4. Любые другие предложения !?