It would be clearer if Rec1 < Rec2 was always true...Then cte1 & cte3 wouldn't really be necessary...Declare @t table ( Rec1 int, Rec2 int)Insert Into @t Select 1, 2Insert Into @t Select 2, 3Insert Into @t Select 4, 3Insert Into @t Select 5, 6Select * From @t--Select * From @t;with cte1 As ( Select * From ( Select * From @t Union All Select Rec1 = Rec2, Rec2 = Rec1 From @t ) A Where Rec1 < Rec2), cte2 As ( Select *, Grp = Rec1 From cte1 Union All Select B.Rec1, B.Rec2, Grp = A.Rec1 From cte1 A Inner Join cte2 B On A.Rec2 = B.Grp), cte3 As ( Select Rec1, Rec2, Grp = MIN(Grp) From cte2 Group By Rec1, Rec2)Select A.*, B.GrpFrom @t AInner Join cte3 BOn (A.Rec1 = B.Rec1 and A.Rec2 = B.Rec2)or (A.Rec1 = B.Rec2 and A.Rec2 = B.Rec1)
Corey
I Has Returned!!