sql >> Base de Datos >  >> RDS >> Sqlserver

Encuentre la conectividad de los valores de las columnas

Estoy bastante seguro de que necesita un CTE recursivo. Sin embargo, los resultados de su muestra no tienen sentido.

Lo siguiente básicamente hace lo que quieres:

with cte AS (
      select nod1, nod2, nod_length as Total_length,
             convert(varchar(max), concat('-', nod1, '-', nod2, '-')) as nodes, 1 as lev
      from tbl_nodes n
      where nod1 = 'A'
      union all
      select cte.nod1, n.nod2, cte.Total_length + n.nod_length,
             convert(varchar(max), concat(cte.nodes, n.nod2, '-')) as nodes, lev + 1
      from cte join
           tbl_nodes n
           on cte.nod2 = n.nod1
      where nodes not like concat('%-', n.nod2, '-%') 
     )
select nodes, total_length
from cte
where not exists (select 1
                  from cte cte2
                  where cte2.nodes like concat(cte.nodes, '_%')
                 );

Aquí es un db<>violín.