CREATE TABLE #Emp( Emp char(6), UplineEmp char(6), Lvl tinyint) ;insert #Emp ([Emp], [UplineEmp], Lvl)values ('209156' ,'003033' ,17), ('209156' ,'152870' ,16), ('209156' ,'147013' ,15), ('209156' ,'209156' ,5 )/*******/, ('211840' ,'003033' ,17), ('211840' ,'033616' ,15), ('211840' ,'211627' ,7 ), ('211840' ,'211840' ,5 ) ;
CREATE TABLE #AR( AgtNum varchar(20), DirectUpline Varchar(20),Lvl0 Varchar(20), Lvl1 Varchar(20), Lvl2 Varchar(20),Lvl3 Varchar(20), Lvl4 Varchar(20), Lvl5 Varchar(20))INSERT #ARVALUES ('209156', '147013', '003033', '152870','147013',NULL,NULL,NULL), ('211840', '211627', '003033', '033616','211627',NULL,NULL,NULL)SELECT * FROM #AR
;WITH CTE AS ( SELECT AgentNum ,Lvl0=MAX(CASE n WHEN 1 THEN UplineEmp END) ,Lvl1=MAX(CASE n WHEN 2 THEN UplineEmp END) ,Lvl2=MAX(CASE n WHEN 3 THEN UplineEmp END) ,Lvl3=MAX(CASE n WHEN 4 THEN UplineEmp END) ,Lvl4=MAX(CASE n WHEN 5 THEN UplineEmp END) ,Lvl5=MAX(CASE n WHEN 6 THEN UplineEmp END) FROM ( SELECT AgentNum=Emp, UplineEmp, Lvl ,n=CASE WHEN Emp=UplineEmp THEN 0 ELSE ROW_NUMBER() OVER (PARTITION BY Emp ORDER BY Lvl DESC) END FROM #Emp) a GROUP BY AgentNum)SELECT AgentNum ,DirectUpline=COALESCE(Lvl5, Lvl4, Lvl3, Lvl2, Lvl1, Lvl0) ,Lvl0, Lvl1, Lvl2, Lvl3, Lvl4, Lvl5FROM CTE