Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znajdź kolumny wartości łączność

Jestem pewien, że potrzebujesz rekurencyjnego CTE. Jednak Twoje przykładowe wyniki nie mają sensu.

Następujące w zasadzie robi to, co chcesz:

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

Tutaj to db<>skrzypce.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pomoc w rozwiązywaniu problemów z SqlException:przekroczenie limitu czasu podczas połączenia w sytuacji braku obciążenia

  2. Nie mogę wykonać ORDERBY na moich danych EF4

  3. Proste zapytanie w celu uzyskania maksymalnej wartości dla każdego identyfikatora

  4. wyzwalacz aktualizacji do aktualizacji rekordów w innej tabeli

  5. serwer sql :wybierz wiersze, których suma pasuje do wartości