안녕하세요..
이름과 생년월일까지 조건을 주어 동명이인을 찾으려고 하는데요..
With TMP AS ( SELECT '홍길동' NAM, '771111' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '홍길동' NAM, '771111' NUM, '비서실' DEP FROM DUAL UNION ALL SELECT '홍길동' NAM, '871212' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '김길동' NAM, '871010' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '김말똥' NAM, '871010' NUM, '총무과' DEP FROM DUAL ) SELECT NAM, NUM, DEP, COUNT(1) OVER(PARTITION BY NAM) CNT FROM TMP;
얼추 원하는 값(구분만 할 수 있으면됨)
김길동 871010 총무과 1
김말똥 871010 총무과 1
홍길동 771111 비서실 2
홍길동 771111 총무과 2
홍길동 871212 총무과 2
다음과 같이 홍길동이 동명이인으로 검색이 되고..
만약 홍길동 871212 가 없을 때는
With TMP AS ( SELECT '홍길동' NAM, '771111' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '홍길동' NAM, '771111' NUM, '비서실' DEP FROM DUAL UNION ALL --SELECT '홍길동' NAM, '871212' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '김길동' NAM, '871010' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '김말똥' NAM, '871010' NUM, '총무과' DEP FROM DUAL ) SELECT NAM, NUM, DEP, COUNT(1) OVER(PARTITION BY NAM) CNT FROM TMP;
구분만 할 수 있으면 됨
김길동 871010 총무과 1
김말똥 871010 총무과 1
홍길동 771111 총무과 1
홍길동 771111 비서실 1
부서가 달라 두줄이 나오지만 이름과 생년월일이 같으므로 동명이인에서는 제외 되게 하고 싶습니다..
도움 부탁드립니다..
With TMP AS ( SELECT '홍길동' NAM, '771111' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '홍길동' NAM, '771111' NUM, '비서실' DEP FROM DUAL UNION ALL SELECT '홍길동' NAM, '871212' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '김길동' NAM, '871010' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '김말똥' NAM, '871010' NUM, '총무과' DEP FROM DUAL ) SELECT NAM, NUM, DEP, DECODE((COUNT(1) OVER(PARTITION BY NAM) - COUNT(1) OVER(PARTITION BY NAM, NUM )), 0, 'N', 'Y') CNT FROM TMP;
다음 처럼 CNT가 0보다 크면 동명이인이 있는거로 해보았는데...뭔가 찝찝하네요..
With TMP AS ( SELECT '홍길동' NAM, '771111' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '홍길동' NAM, '771111' NUM, '비서실' DEP FROM DUAL UNION ALL SELECT '홍길동' NAM, '871212' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '김길동' NAM, '871010' NUM, '총무과' DEP FROM DUAL UNION ALL SELECT '김말똥' NAM, '871010' NUM, '총무과' DEP FROM DUAL ) SELECT NAM , NUM , DEP , COUNT(DISTINCT NUM) OVER(PARTITION BY NAM) GUBUN FROM TMP