找到一个sql老题~还算精典~做完分享一下~~(砍破破破)

w75251455 2007-06-06 11:24:24
--问站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'


...全文
594 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
Linux_9 2007-06-13
  • 打赏
  • 举报
回复
哈哈,我也不写注释。其实自己有时候看自己的东西都费劲。
我也只写SQL,所以没有几行。习惯不好!
kaiy_ai 2007-06-12
  • 打赏
  • 举报
回复
mark
free_pop2k 2007-06-12
  • 打赏
  • 举报
回复
牛人,不过实际不会有这么复杂的要做.
收藏先了!
simonhehe 2007-06-12
  • 打赏
  • 举报
回复
jf?
还有吗? :-)
w75251455 2007-06-12
  • 打赏
  • 举报
回复
a1s2d3f4g5()
做法不是唯一~~~只是自己想到了一种解决方法~~~~对于一段不过十句的代码~~高手只需随手一测~~我也留下了思路~~~~~如果不能从思路上想出怎么做~~那支言片语的注释也没有用~~~`
golfchw 2007-06-12
  • 打赏
  • 举报
回复
不错不错 路过
a1s2d3f4g5 2007-06-12
  • 打赏
  • 举报
回复
评价:楼主编程习惯很差!
注释是为了增强程序可读性的
maopi9999 2007-06-08
  • 打赏
  • 举报
回复
O_o
yuedeem 2007-06-08
  • 打赏
  • 举报
回复
---适当献血有利于骨髓的造血功能

纯属扯淡 :)
w75251455 2007-06-08
  • 打赏
  • 举报
回复
至于脑细胞。。。。。我想每天多弄死几个。。。
----这一想法是来至于另一句话。。。(适当献血有利于骨髓的造血功能)HOHO
w75251455 2007-06-08
  • 打赏
  • 举报
回复
hb_gx(高升) ( ) 信誉:100 Blog 加为好友 2007-06-06 21:20:41 得分: 0

--------------------------------------------------------------------------------
不过到是可以把思路说说:

以exec p_wwww '站C','站Q'为例:

起点站 终点站 乘车线路
---------- ---------- --------------------------------
站C 站Q 站C乘8路-站D-站J转255路-站Q
站C 站Q 站C乘8路-站D转255路-站J-站Q


以@st'站C'遍历乘车可到的每个下一站:以@st'站C'向外扩散并保证不回头(很想画图。。。)只有找到@en'站Q'的路线停止~~最后找出终点站为@en'站Q'的线路
zhangyinchen 2007-06-08
  • 打赏
  • 举报
回复
高手!!
playwarcraft 2007-06-07
  • 打赏
  • 举报
回复
純頂貼~~
w75251455 2007-06-06
  • 打赏
  • 举报
回复
给点正面或负面的评句嘛~~~不准数数。。。。。
肥胖的柠檬 2007-06-06
  • 打赏
  • 举报
回复
5也占了!!
肥胖的柠檬 2007-06-06
  • 打赏
  • 举报
回复
4?
wgzaaa 2007-06-06
  • 打赏
  • 举报
回复
3
Yang_ 2007-06-06
  • 打赏
  • 举报
回复
2
w75251455 2007-06-06
  • 打赏
  • 举报
回复
--又死了几个脑细胞~~~无聊啊!!
hb_gx 2007-06-06
  • 打赏
  • 举报
回复
接受反驳中~~因为我真不知道注释能说明什么。。。

----------------------------------------------

你真是聪明人

我就很苯了自己写的东西如果不写注释过两天我我还真不知道怎么看

LZ真聪明人也!
加载更多回复(14)

11,848

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧