找到一个sql老题~还算精典~做完分享一下~~(砍破破破)
--问站A-站L最短乘车路线(SQL问题)
CREATE TABLE T_Line(
ID nvarchar(10), --公交线路号
Station nvarchar(10), --站点名称
Orders int) --行车方向(通过它反应每个站的上一个、下一个站)
INSERT T_Line
SELECT N '8路 ' ,N '站A ',1 UNION ALL
SELECT N '8路 ' ,N '站B ',2 UNION ALL
SELECT N '8路 ' ,N '站C ',3 UNION ALL
SELECT N '8路 ' ,N '站D ',4 UNION ALL
SELECT N '8路 ' ,N '站J ',5 UNION ALL
SELECT N '8路 ' ,N '站L ',6 UNION ALL
SELECT N '8路 ' ,N '站M ',7 UNION ALL
SELECT N '20路 ' ,N '站G ',1 UNION ALL
SELECT N '20路 ' ,N '站H ',2 UNION ALL
SELECT N '20路 ' ,N '站I ',3 UNION ALL
SELECT N '20路 ' ,N '站J ',4 UNION ALL
SELECT N '20路 ' ,N '站L ',5 UNION ALL
SELECT N '20路 ' ,N '站M ',6 UNION ALL
SELECT N '255路 ',N '站N ',1 UNION ALL
SELECT N '255路 ',N '站O ',2 UNION ALL
SELECT N '255路 ',N '站P ',3 UNION ALL
SELECT N '255路 ',N '站Q ',4 UNION ALL
SELECT N '255路 ',N '站J ',5 UNION ALL
SELECT N '255路 ',N '站D ',6 UNION ALL
SELECT N '255路 ',N '站E ',7 UNION ALL
SELECT N '255路 ',N '站F ',8
GO
select * from T_Line
--问A - L最短乘车路线
/*--例如
起点站 终点站 乘车线路
---------- ------------ -----------------------
站A 站L (8路: 站A-> 站B-> 站C-> 站D-> 站J-> 站L)
--*/
create proc p_wwww
@st varchar(10),
@en varchar(10)
as
if(@st <> @en)
begin
select *,cast(station as varchar(500))+ '乘 '+id line,
1 cunt,cast(station as varchar(500))[order],1[degree] into #
from t_line where station = @st
declare @cunt int
set @cunt=0
while(@@rowcount> 0)
begin
set @cunt=@cunt+1
insert into #
select a.*,
line+case when a.id <> b.id then '- '+a.station+ '转 '+a.id else '- '+a.station end,
@cunt+1,[order]+ '- '+a.station,case when a.id <> b.id then b.degree+1 else b.degree end
from t_line a
join
(select a.station[newstation],b.id,b.station[oldstation],b.line,[order],b.degree from
(select * from t_line)a
join
(select * from # where cunt=@cunt and station <> @en)b
on b.id=a.id and abs(b.orders-a.orders)=1)b
on b.newstation = a.station
where charindex(a.station,[order])=0
end
select @st[起点站],@en[终点站],a.line[乘车线路] from # a
join
(select [order],min(degree)degree from # where station = @en group by [order])b
on b.[order]=a.[order] and b.degree=a.degree
end
else
select @st[起点站],@en[终点站], '无需乘车 '[乘车线路]
--------------------------------------------------测试
exec p_wwww '站F ', '站A '
exec p_wwww '站A ', '站A '
exec p_wwww '站D ', '站J '
exec p_wwww '站A ', '站L '
exec p_wwww '站A ', '站Q '
[解决办法]
2
[解决办法]
3
[解决办法]
4?
[解决办法]
邹老大不是写过吗?
[解决办法]
天才~!
绝对的天才!~
[解决办法]
看看....
[解决办法]
11
[解决办法]
顶!!
[解决办法]
没有注释阿,
[解决办法]
砍破,还有几个脑细胞
[解决办法]
純頂貼
[解决办法]
高手
[解决办法]
高手手
[解决办法]
接受反驳中~~因为我真不知道注释能说明什么。。。
----------------------------------------------
你真是聪明人
我就很苯了自己写的东西如果不写注释过两天我我还真不知道怎么看
LZ真聪明人也!
[解决办法]
純頂貼~~
[解决办法]
---适当献血有利于骨髓的造血功能
纯属扯淡 :)
[解决办法]
O_o
[解决办法]
高手!!
[解决办法]
评价:楼主编程习惯很差!
注释是为了增强程序可读性的
[解决办法]
不错不错 路过