#sql #sapb1
#sql #sapb1
Вопрос:
Это, вероятно, действительно просто, но я не вижу решения. В SAP B1 у меня есть вызов службы, с которым связано несколько заказов на продажу. Мне нужны только результаты из самого последнего заказа на продажу, однако он выдает мне все позиции из каждого заказа на продажу, прикрепленного к нему. Я вижу в своем коде, почему он это делает, но решение просто не появилось передо мной.
Я думал, что смогу это исправить, используя MAX(T4.DocNum) и группировка выбранной информации, однако это не только не сработало, но и избавило от одной из строк, которые я не хотел.
Код;
SELECT T1."callID",T3."ItemCode", T3."Dscription", T3.DocEntry,T2.SrcvCallId,T3.Quantity,T4.DocNum
FROM OSCL T1
LEFT JOIN SCL4 T2 ON T1."callID" = T2."SrcvCallID"
INNER JOIN RDR1 T3 ON T2."Object" = T3."ObjType" AND T2."DocAbs" = T3."DocEntry" AND T2."Object" = '17'
INNER JOIN ORDR T4 ON T4.DocEntry = T3.DocEntry
WHERE T1.callID = 11255
ORDER BY T4.DocDate DESC
Результаты;
Как вы можете видеть, последний результат получен из другого связанного связанного документа, я не хочу, чтобы это отображалось.
Спасибо за любую помощь в этом.
Комментарии:
1. Каков ожидаемый результат?
2. Ожидаемый результат — это все строки, ЗА исключением последней, которая имеет другое значение DocNum (в данном случае). Если какие-либо вызовы службы содержат более одного связанного документа этого типа, то результатом запроса должны быть все позиции только из этого последнего связанного документа.
Ответ №1:
Похоже, я понял это. Решение ниже для всех, кто может столкнуться с этой проблемой.
Я добавил дополнительный раздел в объединение RDR1 для сравнения SCL4.DocPstDate до МАКСИМАЛЬНОЙ docdate из связанного заказа на продажу, который, похоже, выполнил задание.
SELECT T1."callID",
T3."ItemCode" AS 'OrderCode',
T3."Dscription" AS 'OrderDesc',
T3.DocEntry,
T2.SrcvCallId,
T3.Quantity AS 'OrderQty',
T4.DocNum
FROM OSCL T1
LEFT JOIN SCL4 T2 ON T1."callID" = T2."SrcvCallID"
INNER JOIN RDR1 T3 ON T2."Object" = T3."ObjType"
AND T2."DocAbs" = T3."DocEntry"
AND T2."Object" = '17'
AND T2.DocPstDate =
(SELECT MAX(A.DocDate) FROM ORDR A
INNER JOIN RDR1 B ON B.DocEntry = A.DocEntry
INNER JOIN SCL4 C ON C.DocAbs = B.DocEntry AND C.Object = '17'
WHERE C.SrcvCallID = T1.callID)
INNER JOIN ORDR T4 ON T4.DocEntry = T3.DocEntry
WHERE T1.callID = 11255
ORDER BY T4.DocDate DESC