늘 새로운 것을 하나씩 알아간다는 것이 재밌는 것 같습니다.
처음에는 인터널 테이블로 데이터를 받아서
SORT IT_08 BY VKBUR.
DELETE ADJACENT DUPLICATES FROM IT_08 COMPARING VKBUR.
이런식으로 하려고 했는데... 이것 말고 DISTINCT라는 기능으로 SELECT문에서 바로 처리가 가능하다고 하더라구요.
그래서 적용해 보려고 했는데... 안 먹는 것 같습니다.
VKBUR 기준으로 중복된 데이터를 삭제하고 나머지 데이터를 가져오고 싶은데... VKBUR에 괄호를 해도 안되고...
혹시 DISTINCT 선언한 다음 필드가 다 적용되어서 그런건지요???
하나의 필드에만 적용하고 너머지 필드는 그대로 가져올 수 있는 방법은 없나요?
SELECT DISTINCT Z10COT010~VKBUR "Z10COT010~ARTNR Z10COT010~PERBL
"Z10COT010~VV02 Z10COT010~VV09
INTO CORRESPONDING FIELDS OF TABLE IT_08
FROM Z10COT010
WHERE Z10COT010~BUKRS = P_BUKRS
AND Z10COT010~WERKS = P_WERKS
AND Z10COT010~PERBL = D_PERBL.
이렇게 해보니 중복된 것이 삭제되기는 하는데 뒤쪽 데이터도 필요하거든요...
정렬해서 삭제하는 방법뿐일까요?
댓글 4
-
Lynx
2008.09.29 20:28
-
행복을 파는 외계인
2008.09.29 21:00
Lynx님 말씀은... 그럼 두가지다 인터널 테이블에 값은 넣은 다음에 삭제하는 방식이라는 건가요?
아니면... DISTINCT로 값을 받아와서 SELECT문으로 다시 돌려서 뒤쪽에 있는 값을 가져와야 하는 방식?
이해가 잘 안되네요... 느낌으로는 DISTINCT가 더 오래걸리는 기분이???
-
Lynx
2008.09.29 23:29
제가 설명한 대로라면 "DISTINCT로 값을 받아와서 SELECT문으로 다시 돌려서 뒤쪽에 있는 값을 가져와야 하는 방식"이겠네요.
만약에 distinct를 써서 한다면 다시 가져와야하는 빈도수가 더 많다면 아마도 delete 문을 쓰는게 더빠를 수도 있을것 같네요.
-
행복을 파는 외계인
2008.09.29 23:37
Lynx님 친절한 답변 감사합니다~
DISTINCT는 필요한 변수가 있을 때만 써먹어야겠네요...
몇가지 더 해봤는데 역시 DELETE가 편하고 빠르더라구요 ^^
우선 distinct 명령은 주어진 값을 기준으로 중복된 값을 제거하는 기능입니다.
그러나 DELETE ADJACENT DUPLICATES 을 쓰게 되면 키로 선언되어 있는 상태에서 중복된 값을
제거하게 됩니다.
만약 distinct를 쓰려면 키값으로 distinct로 가져온 것을 Internal table에 넣은 다음 loop를 돌면서
필요한 값을 다시 가져오도록 해야할 것 같습니다.