У меня есть следующая таблица с образцами данных:
Таблица: tbl_nodes
create table tbl_nodes
(
nod1 varchar(50),
nod2 varchar(50),
nod_lenght float
);
Образцы данных:
insert into tbl_nodes values('A','B',1600);
insert into tbl_nodes values('G','H',45000);
insert into tbl_nodes values('B','C',2300);
insert into tbl_nodes values('C','D',2640);
insert into tbl_nodes values('B','D',2840);
insert into tbl_nodes values('C','E',2940);
insert into tbl_nodes values('D','F',2340);
insert into tbl_nodes values('M','N',9000);
insert into tbl_nodes values('E','A',100000);
Ожидаемый результат :
Connectivity Total_Length
----------------------------------
A-B-C-D-F 8880
A-B-C-E-A 106840
A-B-D-F 6780
Примечание : Я пытаюсь выяснить связность узлов и сумму длины между узлами.
Я пробовал следующий запрос длято же самое:
Моя попытка :
;WITH CTE AS
(
SELECT nod1,nod2 ,sum(nod_lenght) as Total_length
from tbl_nodes T1
where EXISTS (select 1 from tbl_nodes T2 where T1.nod2 =T2.nod1) OR
EXISTS (select 1 from tbl_nodes T3 WHERE T1.nod1 =T3.nod2)
GROUP BY nod1,nod2
)
SELECT STUFF((select '-'+ case when c1.nod2 = c2.nod1 then c1.nod1 else c2.nod2 end
from CTE c1
where c1.nod2 =c2.nod1 or c1.nod1 =c2.nod2
for xml path('')),1,1,''),Total_length
FROM CTE c2
Невозможно получить ожидаемый результат.