sql >> Database >  >> RDS >> Sqlserver

Zoek de kolommen waarden connectiviteit

Ik ben er vrij zeker van dat je een recursieve CTE nodig hebt. Uw voorbeeldresultaten slaan echter nergens op.

Het volgende doet in principe wat je wilt:

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

Hier is een db<>viool.




  1. sql-query om record te selecteren met dezelfde id maar een andere waarde in twee kolommen

  2. Doe mee met prestatieprobleem MySQL

  3. Schakel SQL Server Agent in via SSMS

  4. Waarom wordt mijn afbeelding niet weergegeven?