매일 매일 배워가며 있는 abap초보입니다.
다름이 아니라 중복 된 데이터를 찾아야하는데 초보인 저로서는
너무 힘든 상황입니다. 고수님께....도움 요청드려요
에를 들어 데이터는
KEY 값1 값2 값3
======================
A 1 2 3
----------------------
B 3 2 1
----------------------
A 2 3 2
----------------------
A 1 1 1
위와같은 데이터가 있습니다. 보통 이런경우 KEY 중복이면 중복 KEY를 지우라고하는데
제가 지금 하고 있는 프로그램은 중복 값이 필요합니다.
어떻게 해야지만이 중복된 키 값만 가지고 올수 있을까요??
도움 요청 드립니다.
댓글 7
-
무파마
2010.01.13 19:18
-
Jon
2010.01.13 19:23
말씀하신게, 테이블의 키라면, 업무에 맞지않게 테이블을 만든것입니다.
다른 값으로 키를 설정하시고,, (A , B 값이 들어있는 필드만으로 프라이머리 키를 정하지 않으셔야합니다.)
-
요요
2010.01.13 19:38
보통은 간단하게 다음처럼 중복키 점검을 하실 수 있겠네요.
아래 방법은 중복 카운트해서 검색하는 것이구요.
중복제거방법으로 하셔서 검색하셔도 되구요.
생각하기에 따라 방법은 많으니 현재 상태에 맞는
최적의 방법을 찾아보시는 것도 좋으실 것 같네요.
DATA : BEGIN OF gs_data,
key,
v1,
v2,
v3,
END OF gs_data,
gt_data LIKE TABLE OF gs_data WITH HEADER LINE.
DATA : it_dup_key TYPE TABLE OF c WITH HEADER LINE.
DATA l_count TYPE i.
APPEND : 'A123' TO gt_data,
'B321' TO gt_data,
'A232' TO gt_data,
'A111' TO gt_data.
SORT gt_data BY key.
CLEAR l_count.
LOOP AT gt_data.
ADD 1 TO l_count.
AT END OF key.
IF l_count > 1.
APPEND gt_data-key TO it_dup_key.
CLEAR l_count.
ENDIF.
ENDAT.
ENDLOOP.
WRITE / 'Dup. key'.
WRITE / '--------'.
LOOP AT it_dup_key.
WRITE / it_dup_key.
ENDLOOP. -
MadMax
2010.01.13 20:00
data: begin of itab occurs 0,
key, <- 중복 확인할 Key 값
count type i,
end of itab
loop at tab(중복 check).
move tab-key to itab-key.
move 1 to itab-count.
collect itab.
endloop.
itab-count 가 1보다 큰것은 중복입니다. count -> 중복된 row 갯수
참고하세요.
-
요요
2010.01.13 20:17
건수가 많을 경우에는 이렇게 해보시는 것도 좋지 않을까 싶네요.
DATA : BEGIN OF gs_data,
key,
v1,
v2,
v3,
END OF gs_data,
gt_data LIKE TABLE OF gs_data WITH HEADER LINE.
DATA : BEGIN OF gs_dup,
key,
dup,
END OF gs_dup,
gt_dup LIKE HASHED TABLE OF gs_dup
WITH UNIQUE KEY key
WITH HEADER LINE.
DATA l_count TYPE i.
APPEND : 'A123' TO gt_data,
'B321' TO gt_data,
'A232' TO gt_data,
'A111' TO gt_data.
CLEAR gt_dup[].
LOOP AT gt_data.
CLEAR gs_dup.
gs_dup-key = gt_data-key.
READ TABLE gt_dup FROM gs_dup
TRANSPORTING NO FIELDS.
IF sy-subrc IS NOT INITIAL.
INSERT gs_dup INTO TABLE gt_dup.
ELSE.
CHECK gt_dup-dup = ' '. " Check duplicates key.
gs_dup-dup = 'X'.
MODIFY gt_dup FROM gs_dup
TRANSPORTING dup
WHERE key = gs_dup-key.
ENDIF.
ENDLOOP.
DELETE gt_dup WHERE dup = ' '. " Delete single key
WRITE / 'Dup. key'.
WRITE / '--------'.
LOOP AT gt_dup.
WRITE / gt_dup-key.
ENDLOOP. -
ako_소마
2010.01.14 02:15
DATA L_KEY LIKE ITAB-KEY.
SORT ITAB BY KEY ASCENDING.
LOOP AT ITAB.
IF ITAB-KEY NE L_KEY.
DELETE ITAB.
ENDIF.
L_KEY = ITAB-KEY.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING KEY.
ㅡ.ㅡ 첨으로 답글 달아보네요....이런것을 원하셨는지....
첨 올리는 답글이라...갠히 긴장되네요...ㅠㅠ..
잘못된 로직이면....삭제해주세요...ㅠㅠ
-
빨강망또
2010.01.20 21:08
어렵게 설명하시네요..
삭제하실 필드 순으로 정열하시구요
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING 삭제할 필드명. 하면 끝입니다.
먼저 KEY 필드를 SORT하시고
DELETE ADJACENT DUPLICATES .. 하시면 될거에요