Я пытаюсь объединить ORDR
, ODLN
и OINV
в запросе SAP HANA, но не могу найти общее для них поле.
Где-то должна быть какая-то запись, которая связывает одно с другим.
Они связаны через отдельную таблицу? Или я упускаю что-то очевидное?
Я пытаюсь объединить ORDR
, ODLN
и OINV
в запросе SAP HANA, но не могу найти общее для них поле.
Где-то должна быть какая-то запись, которая связывает одно с другим.
Они связаны через отдельную таблицу? Или я упускаю что-то очевидное?
Во-первых, отблагодарите Eralper за их ответ, так как содержащаяся в нем ссылка помогла мне найти решение, которое я искал. Однако их решение не содержит объяснения и не совсем дает искомый результат.
Основная информация о заказе на продажу в SAP хранится в двух таблицах, ORDR
и RDR1
. ORDR
имеет одну строку для каждого заказа на продажу, а RDR1
имеет одну строку для каждой строки продукта в заказе на продажу.
Накладные и счета-фактуры (и практически любой документ в SAP) следуют этому шаблону.
Почему это важно для этого вопроса? Поскольку столбец, содержащий данные для связи заказов на продажу, накладных и счетов-фактур, находится в RDR1
(или аналогичном варианте). Его зовут TrgetEntry
.
Поскольку для каждого продукта в Заказе на продажу есть строка, мы не можем просто выполнить объединение, так как любой Заказ на продажу, содержащий более одного продукта, будет отображаться в результате несколько раз. В следующем запросе группировка используется для отображения таблицы, в которой есть строка для каждого заказа на продажу и необходимая информация, чтобы связать ее с накладными.
SELECT T0."DocEntry" AS "SO DE", T0."DocNum" AS "Sales Order Number", T1."TrgetEntry" AS "SO TE", COUNT(T0."DocNum") AS "Rows"
FROM ORDR T0
LEFT JOIN RDR1 T1 ON T0."DocEntry" = T1."DocEntry"
GROUP BY T0."DocEntry", T0."DocNum", T1."TrgetEntry"
Просто изменив имена таблиц, можно создать аналогичные запросы для накладных и счетов-фактур.
Затем вы можете использовать TrgetEntry
и DocEntry
, чтобы связать различные результаты.
Окончательный код, который я использую для отображения заказов на продажу, связанных с ними поставок и счетов-фактур, выглядит следующим образом:
SELECT S0."SalesOrderNumber", S1."DeliveryNumber", S2."DocNum" AS "InvoiceNumber", S0."Rows", S2."DocTotal"
FROM (SELECT T0."DocEntry" AS "SO_DE", T0."DocNum" AS "SalesOrderNumber", T1."TrgetEntry" AS "SO_TE", COUNT(T0."DocNum") AS "Rows"
FROM ORDR T0
LEFT JOIN RDR1 T1 ON T0."DocEntry" = T1."DocEntry"
GROUP BY T0."DocEntry", T0."DocNum", T1."TrgetEntry") S0
LEFT JOIN (SELECT T0."DocEntry" AS "DN_DE", T0."DocNum" AS "DeliveryNumber", T1."TrgetEntry" AS "DN_TE"
FROM ODLN T0
LEFT JOIN DLN1 T1 ON T0."DocEntry" = T1."DocEntry"
GROUP BY T0."DocEntry", T0."DocNum", T1."TrgetEntry") S1 ON S0."SO_TE" = S1."DN_DE"
LEFT JOIN OINV S2 ON S1."DN_TE" = S2."DocEntry"
Пожалуйста, проверьте https://archive.sap.com/discussions/thread/1440163. дано следующее соотношение
SELECT Distinct(T0.DocNum ),T0.DocDate, T0.CardCode, T0.CardName, T1.ItemCode, T1.Quantity, T1.Price,T1.TotalSumSy, T0.DocTotal
FROM ORDR T0
INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN ODLN T2 ON T2.DocEntry = T1.TrgetEntry
INNER JOIN DLN1 T3 on T3.DocEntry = T2.Docentry
INNER JOIN OINV T4 ON T4.DocEntry = T3.TrgetEntry
INNER JOIN INV1 T5 ON T5.DocEntry = T4.DocEntry
LEFT JOIN ORDN T6 ON T6.DocEntry = T5.TrgetEntry
LEFT JOIN RDN1 T7 ON T7.DocEntry = T6.DocEntry
Таким образом, следующее соотношение также верно
SELECT *
FROM ODLN T2
INNER JOIN DLN1 T3 on T3.DocEntry = T2.Docentry
INNER JOIN OINV T4 ON T4.DocEntry = T3.TrgetEntry