중복을 제거 하고 싶습니다;;; & 숫자를 문자로 출력되게... 0 2 4,513

by 물개 [Oracle 기초] 중복 DISTINCT [2012.06.16 12:42:00]


SELECT  
        A.USERID AS 사용자ID,
        A.USERNAME AS 사용자명,
        B.DEPTNM AS 부서명, 
        A.OCCUKIND AS 직종 
FROM COMCUSERM A, COMCDEPTM B 
WHERE TO_CHAR(SYSDATE, 'YYYYMMDD') BETWEEN A.FROMDD AND A.TODD
      AND A.USEYN = 'Y'  
      AND A.DEPTCD = B.DEPTCD

현재 출력되는 구조에서 USERID로 DISTINCT를 걸었는데 
AS 사용자ID 구문이 있으면 에러나고
없으면 되고 하는데 출력내용이 제대로 안나옵니다;;

질문 1. USERID로 중복을 제거하고 출력하는 방법이 뭘까요....
질문 2. 직종에 관한 OCCUKIND 이 부분이 10 20 30 이런식으로 출력되는데
10일때 '학생' 20일 때 '선생님' 이렇게 바꿀 수는 없을까요?
by 현 [2012.06.16 14:21:22]

답변1.USERID로 중복을 제거하고 출력하는 방법
=> group by userid 하시고 나머지 컬럼들은 그룹함수를 사용해서 사용하심됩니다.

답변2. 직종에 관한 OCCUKIND 이 부분이 10 20 30 이런식으로 출력되는데
10일때 '학생' 20일 때 '선생님' 이렇게 바꾸는 방법?
=> 원래는 직종 테이블을 가지고 해당 테이블을 조인해서 사용하시는 것이 맞구요,
직종 테이블이 없을 경우 decode나 case를 사용해서 변환하시면 됩니다.

USERID로 DISTINCT 했을 때 중복이 나온다면,
USERID 별로 사용자명이나 부서명, 직종이 다른 것이 존재한다는 얘기 입니다.
의심이 가는 부분은 AND A.USEYN = 'Y'  입니다.
AND A.USEYN = 'Y' 에 만족하는 데이터가 한건만 있어야 하는데 여러건이 있나 보군요..

해당 테이블들의 구조를 정확히는 알 수 없으나 느낌상 잘못된 데이터 들이 들어가 있는 듯 하네요.

by 물개 [2012.06.17 13:25:33]
와 깊이 있게 짚어 주신점 정말 감사드립니다. 많은 도움이 되었습니다 ^________^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입