求一条SQL
有一个表
车型 出发 目的 路径 价钱
Car1 A E A-E 200
Car1 A D A-D 180
Car1 A B A-B 70
Car1 B C B-C 60
Car1 C E C-E 90
Car1 C D C-D 50
Car1 B E B-E 120
Car1 A C A-C 80
Car2 A E A-E 260
Car2 A B A-B 60
Car2 B E B-E 180
现在要写出SQL查询,可以输入两个参数,@from, @to,开始和目的地,然后取出,从开始地点到目的地的所有路径以及价钱。
同时,不同车型的车不能换乘。
从A到E的结果为:
车型 路径 车费
Car1 A-B-C-E 220
Car1 A-B-E 190
Car1 A-C-E 170
Car1 A-E 200
Car2 A-B-E 240
Car2 A-E 260
[解决办法]
恩,好久没写代码了,研究研究
学习
[解决办法]
写存储过程吧
[解决办法]
顶
有一定难度阿
[解决办法]
对俺来说太难了,标记学习
[解决办法]
学习了
[解决办法]
declare @travel table(
[车型] varchar(20),[出发地] varchar(2),[目的地] varchar(2),[路径] varchar(20),[价格] int)
insert @travel ([车型],[出发地],[目的地],[路径],[价格])
select 'Car1 ', 'A ', 'E ', 'A-E ',200 union
select 'Car1 ', 'A ', 'D ', 'A-D ',180 union
select 'Car1 ', 'A ', 'B ', 'A-B ',70 union
select 'Car1 ', 'B ', 'C ', 'B-C ',60 union
select 'Car1 ', 'C ', 'A ', 'C-A ',60 union --往回走
select 'Car1 ', 'C ', 'E ', 'C-E ',90 union
select 'Car1 ', 'C ', 'D ', 'C-D ',50 union
select 'Car1 ', 'D ', 'E ', 'D-E ',50 union
select 'Car1 ', 'B ', 'E ', 'B-E ',120 union
select 'Car1 ', 'A ', 'C ', 'A-C ',80 union
select 'Car2 ', 'A ', 'E ', 'A-E ',260 union
select 'Car2 ', 'A ', 'B ', 'A-B ',60 union
select 'Car2 ', 'B ', 'E ', 'B-E ',180
declare @from as varchar(50);
declare @to as varchar(50);
set @from= 'A ';
set @to= 'E ';
with t1([车型],[出发地],[目的地],[路径],[价格],[路径1],[价格1])
as
(select [车型],[出发地],[目的地],[路径],[价格],convert(Nvarchar(max),[路径]) as [路径1],convert(int,[价格]) as [价格1]
from @travel
where [出发地]=@from
union all
select a.[车型],a.[出发地],a.[目的地],a.[路径],a.[价格],[路径1]=t1.[路径1]+ '- '+a.[目的地],t1.[价格1]+a.[价格] as [价格1]
from @travel a
join
t1
on a.[出发地]=right(t1.[路径1],1)
where t1.[车型]=a.[车型] and [路径1] not like '% '+a.[目的地]+ '% ' --别重复走
)
select *
from t1
where right(t1.[路径],1)=@to
order by 车型,[路径1]
[解决办法]
2000下面没CTE,,
所以用不了这个with递归语句,