안녕하세요.
아밥 시작한지 얼마 안된 초보 입니다.
2개의 테이블인 AGR_USERS, AGR_TCODES에서 원하는 값을 출력하는것이 목표입니다.
AGR_USERS테이블에는 UNAME(NAME), AGR_NAME(ROLE) 필드가 존재하고
AGR_TCODES테이블에는 AGR_NAME(ROLE), TCODE(TCODE) 필드가 존재합니다.
사용자로부터 입력받는곳이 PARAMETERS(UNAME) 와 SELECT-OPTIONS(TCODE) 이렇게 2개가 있습니다.
PARAMETERS은 필수적으로 입력받아야되며 UNAME을 입력받으면 테이블의 공통필드인 AGR_NAME을 비교하여 존재하면 NAME, TCODE, ROLE 화면에 출력하는것 입니다. 또한, 사용자로부터 SELECT-OPTIONS(TCODE) 항목도 입력받으면 해당 TCODE 존재하면 NAME, TCODE, ROLE 화면에 출력하는것 입니다.
2개의 테이블이 공통적인 필드가 AGR_NAME이 존재하여 JOIN를 했습니다. 그리고 PARAMETERS값도 입력받으면 정상적인 값이 출력이 됩니다. 사용자로부터 SELECT-OPTIONS값을 입력받으면 또 다른 WHERE문이 필요한것 같은데 하나의 SQL문안에 또다른 WHERE문을 넣어도 원하는 값이 나오지 않습니다. 중복 SQL문을 어떻게 적용해야 될지 궁금해서 글 남깁니다.
쉽게 설명하면 PARAMETERS를 무조건 입력받아야되며 PARAMETERS값만 만족하는 결과만 출력하거나 아니면 PARAMETERS와 SELECT-OPTIONS를 입력받아 2개의 조건이 다 만족하는 결과만 출력하는것입니다.
아래 소스는 PARAMETERS에서 입력받은값만 출력되는 화면 입니다. PARAMETERS와 SELECT-OPTIONS의 에서도 정상적인 결과를 출력되는것이 목적입니다. SQL문만 잘쓰면 될것 같은데 잘되지 않습니다.;;
조언좀 부탁드리겠습니다.
REPORT y_jgsong_form001 .
*----------------------------------------------------------------------*
* DATA-DEFINITION *
*----------------------------------------------------------------------*
TYPES: BEGIN OF itab_type,
uname LIKE agr_users-uname,
agr_name LIKE agr_users-agr_name,
tcode LIKE agr_tcodes-tcode,
END OF itab_type.
TABLES: agr_tcodes, agr_users.
DATA: itab_user TYPE itab_type OCCURS 0 WITH HEADER LINE.
*----------------------------------------------------------------------*
* SELECTION-SCREEN *
*----------------------------------------------------------------------*
PARAMETERS : u_name LIKE agr_users-uname.
SELECT-OPTIONS: t_tcode FOR agr_tcodes-tcode.
PERFORM select_user.
SORT itab_user ASCENDING BY uname.
LOOP AT itab_user.
WRITE: / 'Name:', itab_user-uname.
WRITE: / 'Tcode:', itab_user-tcode.
WRITE: / 'Role:', itab_user-agr_name.
ENDLOOP.
*
*
*&---------------------------------------------------------------------*
*& Form select_user
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_user .
SELECT u~uname u~agr_name t~tcode
FROM agr_users AS u INNER JOIN agr_tcodes AS t
ON u~agr_name = t~agr_name
INTO CORRESPONDING FIELDS OF TABLE itab_user
WHERE u~uname = u_name.
ENDFORM. " select_user
댓글 7
-
강태공
2010.12.27 20:34
-
cally
2010.12.27 20:36
일단 정답은... 아래와 같구요..
SELECT u~uname u~agr_name t~tcode
FROM agr_users AS u INNER JOIN agr_tcodes AS t
ON u~agr_name = t~agr_name
INTO CORRESPONDING FIELDS OF TABLE itab_user
WHERE u~uname = u_name
and t~tcode in t_tcode.
책보고 공부하시는 건가요?
sql에 관한건 책에 정말 자세히 나와있는데요.. 또한 f1에도 잘 나와있습니다.
sap만큼 f1 help가 잘 나온거 못봤거든요 쉽고 예제도 있고..
sap 자체에 내장된 예쩨 프로그램들에도 잘 나와있습니다.
생각 많이 하시고 많이 찾고 많이 질문하고 열공 하세요.
많이 부럽네요 ㅎㅎ 공부할 시간...ㅋㅋㅋ
-
깐돌
2010.12.27 20:49
강태공님. 감사합니다.ㅎ; 이거때문에 오래 고민 했는데 한구문으로 해결 해주셨네요.^^
-
깐돌
2010.12.27 20:51
Cally// 책보면서 공부하고 있습니다.;; 책에 많은 내용이 담겨 있어서 여러가지 많이 헤매고 있습니다.ㅜㅜ
-
깐돌
2010.12.27 21:00
인터널 테이블에서 오른쪽같이 출력하는 방법이 없을까요??? IF문을 사용하면 될꺼 같은데 잘 안되네요..
AB 1 2 3 ---> AB 1 2 3
AB 3 2 3 ---> 1 2 3
AC 2 4 3 ---> AC 2 4 3
AC 4 2 1 ---> 4 2 1
-
강태공
2010.12.28 01:29
저의 짧은 지식으로는 아래처럼 밖에 못하겠네요...
AB
123
323
AC
243
421
글로 설명하기가 애매하네요...소스도 같이 적어요..loop문 참고 하시면 되겠네여..^^
DATA: BEGIN OF line,
col1(2) TYPE c,
col2 TYPE i,
END OF line.
DATA : itab LIKE TABLE OF line.
line-col1 = 'AB'.
line-col2 = 123.
APPEND line TO itab.
line-col1 = 'AB'.
line-col2 = 323.
APPEND line TO itab.
line-col1 = 'AC'.
line-col2 = 243.
APPEND line TO itab.
line-col1 = 'AC'.
line-col2 = 421.
APPEND line TO itab.
SORT itab.
CLEAR line.
LOOP AT itab INTO line.
AT NEW col1.
WRITE:/ line-col1.
ENDAT.
AT END OF col2.
WRITE:/ line-col2.
ENDAT.
ENDLOOP.
-
깐돌
2010.12.28 02:23
감사합니다.^^;; 이번엔 다행히 제가 해결했네요..;;ㅋ 그래도 많은 도움 되었습니다.
안녕하세요....
저도 아밥 공부 중인 초보 입니다.
아마도 아래와 같이 조건 수정하면 되지 않을 싶네여..
where 조건에...
WHERE u~uname = u_name and t~tcode in t_tcode.
원하시는 답이 되었는지는...^^