/* How to get linked values in one group using CTE*/
create table table_a
(col1 varchar(100),
col2 varchar(100))
go


insert into table_a values ('item1','item2')
insert into table_a values ('item2','item3')
insert into table_a values ('item3','item4')
insert into table_a values ('item5','item6')
insert into table_a values ('item6','item7')
insert into table_a values ('item8','item9')
go
select * from table_a
go
/*
As per the above data
item1 is linked with item2
and item2 is linked with item3
and item3 is linked with item4
so all item1 , item2 , item3 and item4 are in same group, lets give it number 1.
item5 is linked with item6
and item6 is linked with item7
so item5 , item6 and item7 are in same group, lets give it number 2
item8 and item9 will be in group 3.
We can achieve this result using follwing query.
*/
WITH temp (Col1, Col2, id)
AS (SELECT Col1, Col2,
ROW_NUMBER() OVER (ORDER BY Col1, Col2) AS num
FROM TABLE_A) ,
t as
(select col1 , col2,id,1 as linkid from temp where id= 1
union all
select temp.col1 , temp.col2,temp.id, case when
(temp.col1 in (t.col1, t.col2) or
temp.col2 in (t.col1, t.col2) ) then linkid
else linkid+ 1 end
from temp , t
where temp.id= t.id+1
)
select col1, col2 , linkid from t
Regards
Amish Shah

No comments:

Post a Comment

Popular Posts