你的数据看得好乱
给你个例子,明天有时间再用你的数据测试起始地 目的地 距离(公里)
A B 1000
A C 1100
A D 900
A E 400
B D 300
D F 600
E A 400
F G 1000
C B 600
请用SQL语句或一段代码写出从A出发,可达到的目的地(包括间接方式)。--测试数据
create table t
(st varchar(20),ed varchar(20),km int)
go
insert t values ('A','B',1000)
insert t values ('A','C',1100)
insert t values ('A','D',900)
insert t values ('A','E',400)
insert t values ('B','D',300)
insert t values ('D','F',600)
insert t values ('E','A',400)
insert t values ('F','G',1000)
insert t values ('C','B',600)
goselect * from t
go
--创建函数
--函数返回一个表,根据实际情况的不同一层一层的插入,可以充分利用生成的表
create function f_go(@col varchar(10))
returns @t table(col varchar(30),st varchar(20),ed varchar(20),km int,level int)
as
begin
declare @i int
set @i=1
insert @t select st+'-'+ed,*,@i from t where st=@col
while exists (select * from t a,@t b where
b.ed=a.st and b.level=@i and b.ed<>@col )
begin
set @i=@i+1
insert @t
select b.col+'-'+a.ed,a.st,a.ed,b.km+a.km,@i from t a,@t b
where b.level=@i-1 and b.ed=a.st and b.ed<>@col
end
return
end
go--调用
select * from dbo.f_go('A')
select col,km from dbo.f_go('A')--删除环境
drop function f_go
drop table t--结果
col km
------------------------------ -----------
A-B 1000
A-C 1100
A-D 900
A-E 400
A-B-D 1300
A-C-B 1700
A-D-F 1500
A-E-A 800
A-C-B-D 2000
A-B-D-F 1900
A-D-F-G 2500
A-C-B-D-F 2600
A-B-D-F-G 2900
A-C-B-D-F-G 3600(所影响的行数为 14 行)--给个例子,仅供参考
给你个例子,明天有时间再用你的数据测试起始地 目的地 距离(公里)
A B 1000
A C 1100
A D 900
A E 400
B D 300
D F 600
E A 400
F G 1000
C B 600
请用SQL语句或一段代码写出从A出发,可达到的目的地(包括间接方式)。--测试数据
create table t
(st varchar(20),ed varchar(20),km int)
go
insert t values ('A','B',1000)
insert t values ('A','C',1100)
insert t values ('A','D',900)
insert t values ('A','E',400)
insert t values ('B','D',300)
insert t values ('D','F',600)
insert t values ('E','A',400)
insert t values ('F','G',1000)
insert t values ('C','B',600)
goselect * from t
go
--创建函数
--函数返回一个表,根据实际情况的不同一层一层的插入,可以充分利用生成的表
create function f_go(@col varchar(10))
returns @t table(col varchar(30),st varchar(20),ed varchar(20),km int,level int)
as
begin
declare @i int
set @i=1
insert @t select st+'-'+ed,*,@i from t where st=@col
while exists (select * from t a,@t b where
b.ed=a.st and b.level=@i and b.ed<>@col )
begin
set @i=@i+1
insert @t
select b.col+'-'+a.ed,a.st,a.ed,b.km+a.km,@i from t a,@t b
where b.level=@i-1 and b.ed=a.st and b.ed<>@col
end
return
end
go--调用
select * from dbo.f_go('A')
select col,km from dbo.f_go('A')--删除环境
drop function f_go
drop table t--结果
col km
------------------------------ -----------
A-B 1000
A-C 1100
A-D 900
A-E 400
A-B-D 1300
A-C-B 1700
A-D-F 1500
A-E-A 800
A-C-B-D 2000
A-B-D-F 1900
A-D-F-G 2500
A-C-B-D-F 2600
A-B-D-F-G 2900
A-C-B-D-F-G 3600(所影响的行数为 14 行)--给个例子,仅供参考
---那简单多了
create proc procname
@发车站 varchar(10),
@到达站 varchar(10)
as
begin
select *
from table
where 发车站 = @发车站 and 到达站= @到达站
end
字段中还有个"车次名称",每列车只有唯一的次序,tdl_ID决定这个次序
比如:
T10的次序是 北京,天津,大连,沈阳,长春,吉林
字段中还有个"车次名称",每列车只有唯一的次序,tdl_ID决定这个次序
比如:
T10的次序是 北京,天津,大连,沈阳,长春,吉林 ---你求可用的路线,这个TDL_ID有什么关系呀