SELECT B~EBELN B~MATNR
INTO CORRESPONDING FIELDS OF TABLE ITAB01
FROM MARA AS A INNER JOIN EKPO AS B
ON A~MATNR = B~MATNR
WHERE B~MATNR = ITAB-IDNRK
AND B~WERKS = ITAB-WERKS.
LOOP AT ITAB01.
SELECT SINGLE A~LIFNR A~BEDAT INTO (ITAB01-LIFNR, ITAB01-BEDAT)
FROM EKKO AS A INNER JOIN EKPO AS B
ON A~EBELN = B~EBELN
WHERE B~WERKS = ITAB-WERKS
AND A~BEDAT = ( SELECT MAX( BEDAT )
FROM EKKO WHERE EBELN = ITAB01-EBELN
).
ENDLOOP.
ekko의 bedat가 가장 최근인 vendor code를 불러오려고 합니다.
그런데 최근 날짜는 불러오는데 vendor code는 최근것이 아닌 엉뚱한
vendor code만 오는데 왜그런가요?
제가 처리한 쿼리가 잘못된건지..
댓글 4
-
썬바바
2008.01.08 22:13
-
차칸앙마
2008.01.09 00:04
SELECT B~EBELN B~MATNR
INTO CORRESPONDING FIELDS OF TABLE ITAB01
FROM MARA AS A INNER JOIN EKPO AS B
ON A~MATNR = B~MATNR
WHERE B~MATNR = ITAB-IDNRK
AND B~WERKS = ITAB-WERKS.
==> 이구문은 자재와 사이트가 조건에 맞는 구매오더번호를 읽어오는 부분이군요.
LOOP AT ITAB01.
SELECT SINGLE A~LIFNR A~BEDAT INTO (ITAB01-LIFNR, ITAB01-BEDAT)
FROM EKKO AS A INNER JOIN EKPO AS B
ON A~EBELN = B~EBELN
WHERE B~WERKS = ITAB-WERKS
AND A~BEDAT = ( SELECT MAX( BEDAT )
FROM EKKO WHERE EBELN = ITAB01-EBELN
).
ENDLOOP.
근데 위부분은 쎈바바님의 말처럼 ebeln은 EKKO의 키입니다. 즉 구매문서에 해당하는 구매처 정보를 읽는다는 것 같은데..
로직의 정의부터 다시 정하셔야 할 듯 하네요.
-
하루나
2008.01.09 00:57
위 내용은 결국 특정 플랜트의 특정 자재가 마지막 PO가 생성된 날짜와 VENDOR를 구해오는 내용인가보죠?
다음은 위 내용대로 한번 구성을 해본겁니다만.
data : l_EBELN like ekpo-EBELN ,
l_AEDAT like ekpo-AEDAT .
select AEDAT EBELN
into (l_AEDAT , L_EBELN)
from ekpo
where MATNR = ITAB-IDNRK
AND WERKS = ITAB-WERKS.
ORDER BY AEDAT DESCENDING EBELN DESCENDING . "MAX 값을 맨위로 SORT
EXIT . "MAX 값 산출후 나감(수행 속도고려)
ENDSELECT .
SELECT SINGLE LIFNR BEDAT INTO (ITAB01-LIFNR, ITAB01-BEDAT)
FROM EKKO
WHERE EBELN = L_EBELN .
개인적으로 JOIN은 별로 좋아하지를 않아서 EKKO도 따로 구했습니다.
다음은 혹시 여담으로
select max( AEDAT ) max( EBELN )
into (l_AEDAT , L_EBELN)
from ekpo
where MATNR = ITAB-IDNRK
AND WERKS = ITAB-WERKS.
이렇게 MAX를 구하시면 안됩니다.
그리고 위같은 내용을 구해야 하는 자재의 인터널 테이블이 크다면 위처럼 건건히 구해서는 수행속도가 좋지 않습니다.
ARRAY로 한번에 SELECT하는 SQL을 구성해서 한번에 처리할수 있는 로직을 구현하셔야 합니다.
도움되셨기를 바랍니다.
-
풍뎅이
2008.01.10 01:30
다른 테이블을 이용하여 불러왔습니다.
A~BEDAT = ( SELECT MAX( BEDAT )
FROM EKKO WHERE EBELN = ITAB01-EBELN
이부분을 왜 기술했는지 모르겠네요... EKKO의 키값은 EBELN하나인데..