>3개의 테이블 A, B, C에서
>
>A와 B를 inner join건 itab1을
>
>C와 루핑을 돌리면서 C의 필드를 몇개 추가하려고 합니다.
>
>3개 테이블 전부 공동키가 있어 3개를 전부 inner join해본결과
>
>C테이블의 값중 null값으로 나와야 할부분까지 전부 레코드가 나오더군요.
>
>또..itab1에 C를 outer join해보려 했으나..
>
>C테이블 추가시 파라메터 조건절을 outer join에서는 넣을수없다고(?) 오류가 뜨더군요.
>
>
>
>-> 이건 현재 실패하고 있는 로직입니다..
>
> IF p_vb_n EQ space.
p_vb_n = '%'.
ENDIF.
IF p_vb_v EQ space.
p_vb_v = '%'.
ENDIF.
>
> SELECT
a~auart
a~vbeln
b~posnr
b~matnr
b~kwmeng
b~netwr
FROM vbak AS a
INNER JOIN vbap AS b
ON a~vbeln EQ b~vbeln
INTO CORRESPONDING FIELDS OF TABLE gt_list01
WHERE a~erdat IN s_erdat
AND a~auart IN s_auart.
>
> SELECT
a~vbeln
c~vbeln AS vbeln_a
c~posnn
FROM vbak AS a
INNER JOIN vbfa AS c
ON a~vbeln EQ c~vbelv
INTO CORRESPONDING FIELDS OF TABLE gt_list02
WHERE c~vbtyp_n LIKE p_vb_n
AND c~vbtyp_v LIKE p_vb_v.
>
> LOOP AT gt_list01.
CLEAR gt_list03.
MOVE-CORRESPONDING gt_list01 TO gt_list03.
APPEND gt_list03.
ENDLOOP.
>
> LOOP AT gt_list02.
CLEAR gt_list03.
MOVE-CORRESPONDING gt_list02 TO gt_list03.
APPEND gt_list03.
ENDLOOP.
>
>지금 이렇게 해봤는데 gt_list01에 있는 레코드는 gt_list03에 올라가나 gt_list02 레코드는 전혀 안들어갑니다.
>
>gt_list라는 인터널 테이블을 만들고 01~03까지 like를 써서 그 테이블구조를 그대로 가져온 상태고요..
>
>
>설명이 부족해도.. 초보자의 어설픈점이니 웃어넘겨주시고.. 답변좀 부탁드리겠습니다 ^^;
SELECT "vbak vbap 조인
a~auart
a~vbeln
b~posnr
b~matnr
b~kwmeng
b~netwr
FROM vbak AS a
INNER JOIN vbap AS b
ON a~vbeln = b~vbeln
INTO CORRESPONDING FIELDS OF TABLE gt_list
WHERE a~erdat IN s_erdat
AND a~auart IN s_auart.
LOOP AT gt_list.
DATA : l_vbelv LIKE vbfa-vbelv,
l_posnn LIKE vbfa-posnn.
CLEAR : l_vbelv, l_posnn.
SELECT SINGLE vbeln posnn
FROM vbfa
INTO (l_vbelv, l_posnn)
WHERE vbelv = gt_list-vbeln
AND posnn = gt_list-posnr
AND vbtyp_n = 'J'
AND vbtyp_v = 'C'.
gt_list-vbeln_a = l_vbelv.
gt_list-posnn_a = l_posnn.
MODIFY gt_list.
ENDLOOP.
형님께 도움받아서 완료했습니다.
로직을 떠나서 전체흐름을 이해 못했던탓이 크네요..
지금도 잘이해하는건 아니지만..
일단 vbak , vbap는 헤더와 아이템 테이블
vbfa는 플로우 테이블로 vbeln, vbelv필드를 다 가지고 있고
이 필드들이 vbtyp_n,v 값에 따라서 왔다갔다 하는거더군요.