JI44 테이블에 DUP컬럼을 추가하고 거기에 PNU코드가 중복된 숫자만큼 넣으려고 합니다.
먼저,
SELECT PNU, ROW_NUMBER() OVER(PARTITION BY PNU ORDER BY PNU) AS DUP FROM JI44;
위와 같이 선택을 하여 그림 1과 같이 결과를 얻었습니다.
이후 JI44에 DUP컬럼을 추가하고 거기에 이 값들을 넣으려고 합니다.
(ALTER TABLE ji44 ADD(dup VARCHAR2(10));)
그렇게 하기 위해서는 다음과같은 쿼리를 했는데 안되네요 어떻게 해야하나요?
UPDATE JI44 SET DUP = (SELECT PNU, ROW_NUMBER() OVER(PARTITION BY PNU ORDER BY PNU);
중복된 숫자만큼이라는 정의가 약간 이상하네요.
위의 select 쿼리를 실행하게 되면 같은 pnu에 대해 dup값이 1,2,3.. 순서대로 증가할텐데요.
같은 pnu 값이 중복된 총수를 update하시려는 건지
중복된 값에 대해 numbering된 값을 update하시려는 건지
불명확하네요.
퇴근시간이라 그냥 둘다 적어볼게요.
--중복된 갯수 update하기
merge into ji44 a
using (select pnu, count(1) cnt
from ji44
group by pnu) b
on (a.pnu = b.pnu)
when matched then
update set a.dup = b.cnt
--중복된 값에 대해 순서대로 번호주기
merge into ji44 a
using (select rowid rid, row_number() over(partition by pnu order by pnu) num
from ji44) b
on (a.rowid = b.rid)
when matched then
update set a.dup = b.num
처음에 말씀해 주신거가 제가 원하는거였습니다. 제가 모호하게 작성하였네요 감사합니다