테이블 특정 컬럼의 값 중복된 만큼 숫자 넣기 0 3 1,656

by 후룰쭈쭈빠레로 [SQL Query] 중복값 [2017.03.21 17:41:36]


그림1.JPG (28,432Bytes)

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);

by jkson [2017.03.21 17:57:11]

중복된 숫자만큼이라는 정의가 약간 이상하네요.

위의 select 쿼리를 실행하게 되면 같은 pnu에 대해 dup값이 1,2,3.. 순서대로 증가할텐데요.

같은 pnu 값이 중복된 총수를 update하시려는 건지

중복된 값에 대해 numbering된 값을 update하시려는 건지

불명확하네요.


by jkson [2017.03.21 18:02:50]

퇴근시간이라 그냥 둘다 적어볼게요.

--중복된 갯수 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

 


by 후룰쭈쭈빠레로 [2017.03.21 18:16:26]

처음에 말씀해 주신거가 제가 원하는거였습니다. 제가 모호하게 작성하였네요 감사합니다 

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