오라클 group by 할 때 중복된 거 처리방법 0 3 877

by 아침이네 [Oracle 기초] oralce [2022.01.19 10:30:43]


SELECT A.NO
				  , A.NAME
       			 , B.WORK_YEAR
			    , B.ADDR
		    FROM TABLE A
				 , TABLE B
	         WHERE A.NO= B.CP_NO	
		     AND A.SE_CODE = '02' AND B.WORK_YEAR='2016'
--GROUP BY A.NO, A.NAME, B.WORK_YEAR
ORDER BY B.WORK_YEAR DESC, A.CD;

위에 group by 를 안하면 잘 나오고 하면은 에러가 뜹니다. 조회값과 안 맞춰서 그런건 아는데 group by를 안할 때 A.NO 값의 중복된 값이 같이 조회됩니다.

B.CP_NO를 중복안되도록 조회할려면 쿼리를 어떻게 수정해야 할까요?

by 마농 [2022.01.19 10:41:26]

예시자료를 보여주세요.
- 원본 대비 원하는 결과를 표로 보여주세요.
쿼리도 이상합니다.
- 괄호가 안 맞고
- 중복된 cp_no 가 조회된다는데 Select 절에 cp_no 는 없고?


by 아침이네 [2022.01.19 11:32:24]

쿼리는 수정했습니다. 

NO NAME WORK_YEAR ADDR
G301 홍길동 2016 서울1
G301 임꺽정 2016 서울2
G032 이방원 2016 서울3

위에 NO가 같은데 NAME이 다른 것은 A의 NO가 CP_NO의 상위코드 인 것으로 B는 상위코드값만 있는 테이블이고

A는 상위코드, 하위코드 같이 있습니다. A 테이블에는 NO, CP_NO 컬럼이 있는 것입니다.

제가 원한 건 G301의 홍길동만 그리고 G302 이렇게 2개만 조회를 하고 싶은 것입니다. 

조건절에  NAME을 명시하지는 않고요

 


by 마농 [2022.01.19 12:42:22]
SELECT no
     , name
     , work_year
     , addr
  FROM (SELECT a.no
             , a.name
             , b.work_year
             , b.addr
             , a.cd
             , ROW_NUMBER() OVER(PARTITION BY a.no ORDER BY 1) rn
          FROM table a
             , table b
         WHERE a.no = b.cp_no
           AND a.se_code = '02'
           AND B.work_year = '2016'
        )
 WHERE rn = 1
 ORDER BY cd
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입