|
/* 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
|
Leave a comment