안녕하세요. 즐거운 금요일입니다.
쿼리를 짜는데 제가 쿼리실력 너무 딸려서 그런지 막혀서 업무에 지장이 생기는중입니다.
고유ID / 아빠 / 엄마
140101 / 130101 / 130201
140201 / 130105 / 130205
151001 / 140101 / 140201
151002 / 140101 / 140201
위에 형식처럼 되어있는 자료를 다시 리넘버링 하고 싶은데,
앞에 고유ID는 rank() over 를 사용해서 하면 앞에 출력순서대로 1번부터 차례대로 부여가 가능합니다.
리넘버 / 아빠 / 엄마
1 / 130101 / 130201
2 / 130105 / 130205
3 / 140101 / 140201
4 / 140101 / 140201
근데 고유ID를 앞에 값으로 치환이 가능한데, 첫행에 고유ID 140101이 1로 바뀐걸 뒤에 아빠코드나 엄마코드에
같은 코드가 있다면 변경하고 싶네요.
리넘버 / 아빠 / 엄마
1 / 0/ 0
2 / 0/ 0
3 / 1/ 2
4 / 1/ 2
위에 처럼 변경하고 싶습니다. 어떤식으로 쿼리를 짜면 될지 좋은 답변 부탁드립니다. ( _ _ )
동일 코드가 없는건은 0 으로 치환하는걸로 이해하고 쿼리를 작성했습니다.
참고만 하세요..
이게 최적화된 쿼리는 절대 아닐겁니다 -_-;;;
더 좋은 방법은 다른 고수분들이 답변을 쿨럭;;
-----쿼리시작-----
with tblA(고유ID,아빠,엄마) As
(
Select '140101','130101','130201' Union All
Select '140201','130105','130205' Union All
Select '151001','140101','140201' Union All
Select '151002','140101','140201'
)
,tblB (renum,고유ID) As
(
Select Rank() Over(Order By a.고유ID) As renum
,a.고유ID
From tblA a
)
,tblC (고유ID,아빠,엄마) As
(
Select ISNULL(b.renum,0)
,ISNULL(c.renum,0)
,ISNULL(d.renum,0)
From tblA a
Left Outer Join
tblB b
On a.고유ID = b.고유ID
Left Outer Join
tblB c
On a.아빠 = c.고유ID
Left Outer Join
tblB d
On a.엄마 = d.고유ID
)
Select a.*
From tblC a