TBL_A | RESULT1 | |||
ID1 | ID2 | ID1 | ID2 | |
A | 1 | A | 6 | |
A | 2 | A | 5 | |
A | 3 | B | 8 | |
A | 5 | B | 7 | |
A | 6 | C | 4 | |
B | 2 | C | 1 | |
B | 3 | D | 10 | |
B | 4 | D | 3 | |
B | 7 | |||
B | 8 | RESULT2 | ||
C | 1 | ID1 | ID2 | |
C | 4 | A | 1 | |
C | 5 | A | 2 | |
C | 6 | B | 3 | |
C | 7 | B | 4 | |
C | 8 | C | 5 | |
D | 3 | C | 6 | |
D | 5 | D | 7 | |
D | 6 | D | 10 | |
D | 7 | |||
D | 10 |
위와 같은 테이블 A에서 결과1 또는 2를 원합니다.
조건은 각 ID1의 객체별로 두개씩 대응하는 ID2를 추출하는데, 대신 ID2에는 ID1에 대응하는 중복값이 많아, 이미 ID1에 대응이 된 ID2는 제거된, 즉 중복값이 없는 ID2를 원합니다. ID1에 대응하는 ID2를 추출하는 조건은 상관없으며, ID1에 대응하는 ID2 중에 큰 값 2개도 괜찮고 작은값 두개도 괜찮습니다. 대신 ID2의 중복값을 없어야 합니다.
도와주십시오 ㅠ 아무리 돌려도 이상하게 나오네요 ㅠ
감사합니다~!
Comment 3
-
루디먼트
2018.07.11 15:32
-
브라미
2018.07.11 17:44
A, B, C, D를 하나하나 지정해서 하는 방법 말고는 없을까요?
저런 A,B,C,D가 10000개 이상이 있어서요 ㅠ.ㅠ
재귀절을 이용하면 가능할 것 같은데, 도무지 잘 모르겠습니다.
-
루디먼트
2018.07.24 16:30
제 머리에서는 루프문 밖에 답이 없어 보이네요~
declare @vKey char(1) ,@vStart int = 1 ,@vLimit int = 1; select row_number() over(order by (select 1)) as cRow , col1 into #group from #tmp group by col1; set @vLimit = @@rowcount; while @vStart <= @vLimit begin select @vKey = col1 from #group where cRow = @vStart; insert into #result select top 2 a.col1 , a.col2 from #tmp as a left join #result as b on b.col2 = a.col2 where b.col1 is null and a.col1 = @vKey order by a.col2; set @vStart += 1; end; /* drop table #group truncate table #result select * from #result order by col2 */
리커시브 쿼리로 하면 쉽게 할수도 잇을꺼 같은데, 잘 안써봐서;;