SELECT A~AUFNR AS DELNR
A~KDAUF AS VBELN
A~MATNR
A~MGVRG AS PSMNG
B~LMNGA AS WEMNG
C~WEMNG AS WEMNG1
A~LMNGA AS KWMENG2
A~AUART AS DAUAT
INTO CORRESPONDING FIELDS OF TABLE ITAB00
FROM S961 AS A
INNER JOIN AFRU AS B
ON A~AUFNR = B~AUFNR
INNER JOIN AFPO AS C
ON A~AUFNR = C~AUFNR
WHERE A~VRSIO = '000'
AND A~WERKS = '1000'
AND A~KDAUF IN S_VBELN
AND B~RUECK = ( SELECT MAX( RMZHL ) FROM AFRU WHERE AUFNR IN S_DELNR1 )
AND B~AUFNR IN S_DELNR1
AND A~AUART IN S_DAUAT.
위의 B~LMNGA AS WEMNG를 가져올때 AND B~RUECK = ( SELECT MAX( RMZHL ) FROM AFRU WHERE AUFNR IN S_DELNR1 )
조건의 데이터를 가져오는데 AFRU-STOKZ필드가 'X'인것은 '-'해서(수량을 빼서) SUM을 하려고 합니다.
예를 들어
AFRU테이블
RUECK RMZHL STOKZ LMNGA AUFNR
5 1 X 150 000010000004
5 2 150 000010000004
이라할때 AUFNR이 000010000004인 RUECK가 5로 같고 STOKZ이 'X'가 없을시는 RMZHL이 큰차수가 2이므로
LMNGA를 150인것으로 가져오면 되나 STOKZ이 'X'가 존재하므로 값은 0이 됩니다.
오라클의 CASE WHEN과 같은 처리를 해야할 것 같은데 ABAP에서도 가능한지 알고 싶습니다.
댓글 8
-
숟가락맨
2007.12.06 20:23
인터널 테이블에 받아서 루프로 돌리면서 로직 처리 하면 돼지 않나요? -
hongman
2007.12.06 20:30
Open SQL에서는 지원되지 않는 기능입니다.
데이터를 가져와서 Loop 문을 돌면서 처리를 해주셔야 할듯 합니다.
-
SSong
2007.12.06 20:30
CASE WHEN 같은 기능이 있으면 좋겠지만 없는걸로 알고 있습니다.
SAP에서는 DB에서 어떤 일을 처리 하는것을 추천 하지는 않습니다 .
조인으로 인해 충분히 DB에 무리가 있을수 있다고 생각이 듭니다 . CASE WHEN 기능 보다는
숟가락맨 님의 말씀처럼 인터널 테이블로 데이타를 처리 하시는게 더 좋을것 같습니다 .
하물며 DB 커리상에서 하는 ORDER BY 같은기능들도 SORT BY를 사용하시는게 시스템 상으로 더 좋다고 생각이 듭니다 .
-
지의
2007.12.06 20:35
정 써야 한다면 Native SQL 로... 하지만 역시 비추...
-
풍뎅이
2007.12.06 20:44
답변 모두 감사드립니다. -
뱅가니
2007.12.06 21:17
좋은정보 감사합니다. -
백혜정
2007.12.07 00:26
풍뎅이님처럼 DB관련 지식이 있는 분들중에 ABAP을 처음 접하시는 분들이 종종 겪으시는 문제들이 몇가지 있습니다.
저도 그랬고요.... ㅜ.ㅜ
오라클의 SQL보다 기능이 적어 많이 불편해 하십니다.
그리고, join이나 subquery 사용시 다른 일반 프로그램보다 성능이 무척 떨어지는 경우를 많이 겪으실겁니다.
(모두의 고민사항들이죠 ㅜ.ㅜ)
join을 적게하고 itab으로 불러와 처리하는 것이 성능면에서 좋은 경우가 많습니다.
-
촌놈
2007.12.11 02:05
아... 오라클 SQl과 여기 erp SQl은 많이 다른가보네요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ