Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намерете свързаността на стойностите на колоните

Почти съм сигурен, че имате нужда от рекурсивен CTE. Вашите примерни резултати обаче нямат смисъл.

Следното основно прави това, което искате:

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

Тук е db<>цигулка.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Log4net не се вмъква в базата данни?

  2. Как мога да сортирам обикновено колона „Номер на версията“ с помощта на заявка на SQL Server

  3. SQL - Изберете най-новия запис, когато има дубликат

  4. Текстова колона, която не съхранява повече от 8000 знака

  5. Как правите множество вътрешни свързвания в Linq to Entities