Какая связь в HANA между заказами на продажу, поставками и счетами

Я пытаюсь объединить ORDR, ODLN и OINV в запросе SAP HANA, но не могу найти общее для них поле.

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

Они связаны через отдельную таблицу? Или я упускаю что-то очевидное?


person CalvT    schedule 08.12.2017    source источник


Ответы (2)


Во-первых, отблагодарите 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"
person CalvT    schedule 12.12.2017

Пожалуйста, проверьте 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
person Eralper    schedule 11.12.2017