Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tìm giá trị cột kết nối

Tôi khá chắc rằng bạn cần một CTE đệ quy. Tuy nhiên, kết quả mẫu của bạn không có ý nghĩa.

Về cơ bản, điều sau đây thực hiện những gì bạn muốn:

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

Tại đây là một db <> fiddle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - Toán hạng dữ liệu kiểu datetime2 không hợp lệ cho toán tử trừ

  2. Truy vấn bảng lớn trong máy chủ sql 2008

  3. Chuẩn hóa dữ liệu (Có thể là một Pivot?)

  4. Mệnh đề WHERE có điều kiện trong SQL Server

  5. Làm cách nào để phân biệt các tên cột trùng lặp với các bảng nguồn / truy vấn con khác nhau bằng bí danh trong câu lệnh SQL select khi sử dụng SqlDataReader?