Find the columns values connectivity

后端 未结 1 992
一整个雨季
一整个雨季 2021-01-16 16:10

I have the following table with sample data:

Table: tbl_nodes

create table tbl_nodes
(
    nod1 varchar(50),
    nod2 varchar(50),
    n         


        
相关标签:
1条回答
  • 2021-01-16 16:52

    I'm pretty sure you need a recursive CTE. However, your sample results doesn't make sense.

    The following basically does what you want:

    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, '_%')
                     );
    

    Here is a db<>fiddle.

    0 讨论(0)
提交回复
热议问题