안녕하세요.
회사에서 업무를 하는 중에 아래 쿼리가 필요한데.. 잘 모르겠습니다.
고수분들 계시면 좀 도와 주시기 바랍니다.
Table 1
a b 가족
1 2 1
2 3 2
3 4 3
1 3 1
2 5 2
8 9 8
A와 B가 서로 관계가 있고, C에는 가족을 묶는 작업입니다.
즉
a b 가족
1 2 1
2 3 1
3 4 1
1 3 1
2 5 1
8 9 8
이런식의 Data로 만들기를 원합니다.
1과 2는 가족이고, 2와 3은 가족, 3과 4는 가족, 1과 3은 가족 2와 5는 가족이므로 전부 동일한 가족.
8과 9는 가족인데, 이는 그 이전 가족과는 다른 가족이므로 8 그대로..
감사합니다.
Comment 1
-
건우아빠
2013.06.28 13:41
사용자 함수를 하나 만들어 이용.. 성능에 큰 지장 없는 내용이면 편하게 쿼리하는 ..
with data
as (
select 1 a,2 b,1 c union all
select 2 ,3 ,2 union all
select 3 ,4 ,3 union all
select 1 ,3 ,1 union all
select 2 ,5 ,2 union all
select 8 ,9 ,8 )
select * into data
from data
create function uf_cte_a
( @b int
)
returns int
as
begin
declare @a int ;
with cte_a(a,b,lev) as (
select a,b,2 lev
from data
where b = @b
union all
select a.a,a.b,b.lev + 1
from data a join cte_a b on a.b = b.a
)
select top 1 @a = a from cte_a
order by lev desc
return @a
end
select * , dbo.uf_cte_a(b) 가족
from data