с таблицами, скопированными из SAP.
Если вы скопировали ALL таблиц, вы можете улучшить свой запрос следующим образом.
Существует замечательная таблица EKBE
, которая является историей документа заказа и напоминает все данные заказа из EKPO
. Он содержит как номера заказов, так и соответствующие номера документов материалов
EKBE: MSEG:
BELNR -> MBLNR
GJAHR -> MJAHR
BUZEI -> ZEILE
Это полностью исключает необходимость MSEG
/ MKPF
в вашем ужасном запросе. Возможные значения SELECT могут быть следующими:
SELECT ekbe.ebeln, ekbe.ebelp, bseg.hkont
FROM ekbe
LEFT JOIN bkpf ON bkpf.mandt = ekbe.mandt AND left(bkpf.awkey,10) = ekbe.belnr AND right(left(bkpf.awkey,14),4) = ekbe.gjahr AND bkpf.awtyp = 'RMRP'
LEFT JOIN bseg ON bseg.mandt = bkpf.mandt AND bseg.bukrs = bkpf.bukrs AND bseg.gjahr = bkpf.gjahr AND bseg.belnr = bkpf.belnr
Обратите внимание, что поле AWTYP
также должно быть указано в JOIN
, поскольку в любом бухгалтерском документе может быть много материалов разных типов в году (AWKEY
= <object number>
+ <year>
).
Кроме того, я не ценю порядок, в котором вы присоединяетесь к столам в исходном SELECT. Обычно таблица исходных данных (EKPO
в нашем случае, когда мы ищем учетную запись для каждого заказа на покупку) ставится первой, а все остальные присоединяются к ней. Но это вопрос вкуса, а также вопрос синтаксиса Redshift, который вы знаете лучше.