테이블에 시간 필드가 잇는데 일자와 시간 필드에 따라서 데이타 를 가져오는데요
만약 조회 일자가 2월20 이라면 테이블에서 테이타를 2월1부터 2월20까지 가져와야 하는데 시간 필드가 좀 문제 되네요
만약 시간필드에 오전만 잇으면 오전에 해당되는 데이타를 가져오고 오후만 잇으면 오후 데이타만 가져오고 오전,오후 다 잇으며는 오후 데이타를 가져오는데 어떠한 로직으로 구현하면 되는지 알려주삼,부탁합니다.
감사합니다.
댓글 4
-
처서련
2009.02.20 23:39
-
카츠
2009.02.21 02:52
될지 안될지는 모릅니다.. 제가 완전 초보라 퍼포먼스 무시하고 룹안에 룹돌리고 했어요..
참고해서 해보시구 되는지 여부도 좀 알려주세요 ^^;
DATA : it_tab TYPE TABLE OF dbtab WITH HEADER LINE.
DATA : l_chk TYPE sy-uzeit VALUE '120000'.
DATA : l_date TYPE it_tab-date.
DATA : l_tmp01.
DATA : l_tmp02.
DATA : gt_tab TYPE TABLE OF dbtab WITH HEADER LINE.
SELECT *
FROM dbtab
INTO it_tab
WHERE s_date IN date.
LOOP AT it_tab.
IF it_tab-time < l_chk. "오전값이 있을시
l_tmp01 = l_tmp01 + '1'.
ELSEIF it_tab-time > l_chk. "오후값이 있을시
l_tmp02 = l_tmp02 + '1'.
ELSE.
EXIT.
ENDIF.
l_date = it_tab-date.
AT END OF date. "날짜값이 바뀔때 오전,오후체크된 l_tmp01, l_tmp02를 조회
IF l_tmp01 IS NOT INITIAL AND "오전 오후다 값이 있을때 오후값만 추가.
l_tmp02 IS NOT INITIAL.
LOOP AT it_tab.
IF it_tab-date = l_date
AND it_tab-time >= l_chk.
gt_tab = it_tab.
APPEND gt_tab.
CLEAR : it_tab, l_date.
ENDIF.
ENDLOOP.
ELSEIF l_tmp01 IS NOT INITIAL AND "오전값만 있을경우 오전값만 추가
l_tmp02 IS INITIAL.
LOOP AT it_tab.
IF it_tab-date = l_date
AND it_tab-time < l_chk.
gt_tab = it_tab.
APPEND gt_tab.
CLEAR : it_tab, l_date.
ENDIF.
ENDLOOP.
ELSEIF l_tmp01 IS INITIAL AND "오후값만 있을경우 오후값만 추가.
l_tmp02 IS NOT INITIAL.
LOOP AT it_tab.
IF it_tab-date = l_date
AND it_tab-time >= l_chk.
gt_tab = it_tab.
APPEND gt_tab.
CLEAR : it_tab, l_date.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR : l_tmp01, l_tmp02.
ENDIF.
ENDAT.
ENDLOOP. -
카츠
2009.02.21 03:04
에고 클리어위치가 잘못되서 다시 수정..
AT END OF date. "날짜값이 바뀔때 오전,오후체크된 l_tmp01, l_tmp02를 조회
IF l_tmp01 IS NOT INITIAL AND "오전 오후다 값이 있을때 오후값만 추가.
l_tmp02 IS NOT INITIAL.
LOOP AT it_tab.
IF it_tab-date = l_date
AND it_tab-time >= l_chk.
gt_tab = it_tab.
APPEND gt_tab.
CLEAR : it_tab.
ENDIF.
ENDLOOP.
ELSEIF l_tmp01 IS NOT INITIAL AND "오전값만 있을경우 오전값만 추가
l_tmp02 IS INITIAL.
LOOP AT it_tab.
IF it_tab-date = l_date
AND it_tab-time < l_chk.
gt_tab = it_tab.
APPEND gt_tab.
CLEAR : it_tab.
ENDIF.
ENDLOOP.
ELSEIF l_tmp01 IS INITIAL AND "오후값만 있을경우 오후값만 추가.
l_tmp02 IS NOT INITIAL.
LOOP AT it_tab.
IF it_tab-date = l_date
AND it_tab-time >= l_chk.
gt_tab = it_tab.
APPEND gt_tab.
CLEAR : it_tab.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR : l_tmp01, l_tmp02, l_date.
ENDAT.
ENDLOOP. -
SAYA
2009.02.23 17:30
조회를 하기전에 먼저 오전,오후 데이터가 있는지 먼저 체크를 한 다음에
조회를 하는것도 한 방법일 것 같네요.
data: l_chk(2).
select count(*) from 테이블 where 시간 < 12:00:00
if sy-dbcnt > 0.
l_chk(1) = 'X'
endif.
select count(*) from 테이블 where 시간 >= 12:00:00
if sy-dbcnt > 0.
l_chk+1(1) = 'X'
endif.
*** if l_chk = 'XX' "오전오후
동적 where 구문 작성
elseif l_chk(1) = 'X' "오전
동적 where 구문 작성
elseif l_chk+1(1) = 'X' "오후
동적 where 구문 작성
endif.
결과 : select * from 테이블 where (condition).
오전 오후 같은경우는 12:00:00 이기준으로 나누시면 될것같은데
12시보다 작으면 오전이고 크면 오후로 하시면 될것같지만 저도 초보라서요
둘다있다는건 무슨뜻인지 모르겠어요