i have to create as a query this step:
update t1
set c3='000'
from t_loop t1
join t_loop t2
on t1.c2=t2.c1
where t1.c3 is null
and t2.c3 is not null
while (@@rowcount>0)
update t1
set c3='000'
from t_loop t1
join t_loop t2
on t1.c2=t2.c1
where t1.c3 is null
and t2.c3 is not null
this code check where the column c1 have c3 valued and then on loop for each c2 that match, valued its c3.
for example:
select *
into [t_loop]
from
(
select 'v1'c1,'v2'c2,NULL c3 union all
select 'v10','v9',NULL union all
select 'v2','v3',NULL union all
select 'v3','v2','000'union all
select 'v4','v2',NULL union all
select 'v5',NULL ,NULL union all
select 'v6',NULL ,NULL union all
select 'v7','v1',NULL union all
select 'v8','v7',NULL union all
select 'v9',NULL ,NULL union all
select 'va','vb',NULL union all
select 'vb','vc',NULL union all
select 'vc','vb',NULL union all
select 'vd',NULL ,NULL union all
select 've',NULL ,NULL union all
select 'vf','vb','000'
)t
and then the result is:
c1 c2 c3
v1 v2 000
v10 v9 NULL
v2 v3 000
v3 v2 000
v4 v2 000
v5 NULL NULL
v6 NULL NULL
v7 v1 000
v8 v7 000
v9 NULL NULL
va vb NULL
vb vc NULL
vc vb NULL
vd NULL NULL
ve NULL NULL
vf vb 000
i tried tieh CTE but i can t do it...can someone help me??
!! SOLVED!!
using post of gofr1
here the CTE explanation
--CTE explosion
--query 1
SELECT t1.c1,
t1.c2
from t_loop t1
join t_loop t2
on t1.c2=t2.c1
where t1.c3 is null
and t2.c3 is not null
union all
--query 2
SELECT t1.c1,
t1.c2
from t_loop t1
join --cte -> replace cte with the first query (query 1)
(
SELECT t1.c1,
t1.c2
from t_loop t1
join t_loop t2
on t1.c2=t2.c1
where t1.c3 is null
and t2.c3 is not null
)
t2
on t1.c2=t2.c1
where t1.c3 is null
union all
--query 3
SELECT t1.c1,
t1.c2
from t_loop t1
join --cte -> replace cte with the second query (query 2)
(
SELECT t1.c1,
t1.c2
from t_loop t1
join
(
SELECT t1.c1,
t1.c2
from t_loop t1
join t_loop t2
on t1.c2=t2.c1
where t1.c3 is null
and t2.c3 is not null
)
t2
on t1.c2=t2.c1
where t1.c3 is null
) t2
on t1.c2=t2.c1
where t1.c3 is null