2013-05-29 3 views
2

В SAP следующий запрос работает хорошо. Но есть результат я получаю # 5000000 линии для 3000 статей (MATNR):Синтаксис подзапроса с SAP/SQL

SELECT k~bldat a~matnr k~bldat e~maktx a~mtart a~brgew 
    a~ntgew a~gewei a~volum a~laeda mseg~bwart k~budat 
INTO CORRESPONDING FIELDS OF TABLE itab 
    FROM mseg 
    INNER JOIN makt AS e ON e~matnr = mseg~matnr 
     INNER JOIN mara AS a ON a~matnr = mseg~matnr 
     INNER JOIN mkpf AS k ON k~mblnr = mseg~mblnr 
    WHERE a~mtart in ('ZRSV','ZVTP'). 

Но если я просто хочу, последнее движение/дату для каждого из моего MATNR, следующий запрос вернуть эту ошибку: Неправильного имени таблицы или псевдоним таблицы имя таблицы имя псевдонима «(SELECT MAX (T»

SELECT k~bldat a~matnr k~bldat e~maktx a~mtart a~brgew 
    a~ntgew a~gewei a~volum a~laeda mseg~bwart k~budat 
INTO CORRESPONDING FIELDS OF TABLE itab 
    FROM mseg 
    INNER JOIN makt AS e ON e~matnr = mseg~matnr 
     INNER JOIN mara AS a ON a~matnr = mseg~matnr 
     INNER JOIN mkpf AS k ON k~mblnr = mseg~mblnr 
    WHERE a~mtart in ('ZRSV','ZVTP') 
     AND k~bldat = (SELECT MAX(t~bldat) FROM mkpf AS t 
       WHERE t~mblnr = mesg~mblnr). 

Любая идея проблемы синтаксиса заранее спасибо

ответ

0

Вам нужно добавить пробелы перед суб- SELECT -statement.?.:

AND k~bldat = (SELECT MAX ... = ~mblnr). 
      ^HERE   AND HERE^
+0

Благодарим за советы! Теперь я могу выполнить запрос. Но запрос возвращает все записи. Это похоже на то, что фильтр MAX() не работает ... – FredM

+0

Я не так свободно владею таблицами MM - можно ли выбрать весь набор данных (без подзапроса), а затем использовать 'SORT itab BY mblnr bldat DESCRNDING '(это оставляет самую последнюю запись для каждого' mblnr' сверху), а затем 'DELETE ADJACENT DUPLICATES FROM itab СРАВНЕНИЕ mblnr'? – vwegert

+0

Хорошо, я последую вашим советам. (даже если бы я предпочел исключить данные на входе и не заполнить itab большим количеством данных, которые мне не нужны). Еще раз спасибо за вашу помощь! – FredM

Смежные вопросы