首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一条SQL解决方案

2012-01-03 
求一条SQL有一个表车型出发目的路径价钱Car1AEA-E200Car1ADA-D180Car1ABA-B70Car1BCB-C60Car1CEC-E90Car1C

求一条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递归语句,

热点排行