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를 중복안되도록 조회할려면 쿼리를 어떻게 수정해야 할까요?
예시자료를 보여주세요.
- 원본 대비 원하는 결과를 표로 보여주세요.
쿼리도 이상합니다.
- 괄호가 안 맞고
- 중복된 cp_no 가 조회된다는데 Select 절에 cp_no 는 없고?
쿼리는 수정했습니다.
예
| 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을 명시하지는 않고요
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
;