公交线路查询
 

线路 运行区间和时间 沿途站点
游2线下行 灵谷寺公园8:40-17:30
雨花台南门7:40-16:30
灵谷寺公园-水榭-中山陵-海底世界-明孝陵-石象路-前湖-卫桥(西)-中山门-明故宫-解放路-总统府-大行宫南站-杨公井-夫子庙-三山街-金沙井-长乐路-中华门内-雨花台-雨花新村-共青团路-雨花台南门

 
14路下行 所街5:40-23:00
双龙街西站5:10-22:30
所街-湖西街(应天大街)-应天大街西-黄山路-泰山路-南苑新村-彩虹苑-集庆门大桥-集庆门-殷高巷-长乐路-箍桶巷-马道街-江宁路-大树城-养虎巷-土城头-土城头南站-城头城-卡子门-夹岗-双龙街西站

 
乘车路线:由 [夫子庙] 坐 <游2线下行> 到 [长乐路] 换乘 <14路下行> 到达 [江宁路]

============================================================================
公交查询,比如从夫子庙到江宁  ,有的可以直达,有的需要转车,按照普通做法似乎要写很多循环来判断,特别是需要转车,请大家提提有没有什么好的写的方法,谢谢,分不够再加

=======================================================================================
 --參考
/***********邹老大*************/

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

--乘车线路查询存储过程
CREATE PROC p_qry
@Station_Start nvarchar(10),
@Station_Stop  nvarchar(10)
AS
SET NOCOUNT ON
DECLARE @l int
SET @l=0
SELECT ID,Station,
      Line=CAST('('+RTRIM(ID)+': '+RTRIM(Station) as nvarchar(4000)),
      Orders=Orders,
      [Level]=@l
INTO # FROM T_Line
WHERE Station=@Station_Start
WHILE @@ROWCOUNT>0
      AND NOT EXISTS(SELECT * FROM # WHERE Station=@Station_Stop)
BEGIN
      SET @l=@l+1
      INSERT #(Line,ID,Station,Orders,[Level])
      SELECT
            Line=a.Line+CASE
                  WHEN a.ID=b.ID THEN N'->'+RTRIM(b.Station)
                  ELSE N') ∝ ('+RTRIM(b.ID)
                        +N': '+RTRIM(b.Station) END,
            b.ID,b.Station,b.Orders,@l
      FROM # a,T_Line b
      WHERE a.[Level]=@l-1
            AND(a.Station=b.Station AND a.ID<>b.ID
                  OR a.ID=b.ID AND(
                        a.Orders=b.Orders+1
                        OR
                        a.Orders=b.Orders-1))
            AND LEN(a.Line)<4000
            AND PATINDEX('%[ >]'+b.Station+'[-)]%',a.Line)=0
END
SELECT N'起点站'=@Station_Start
      ,N'终点站'=@Station_Stop
      ,N'乘车线路'=Line+N')'
FROM #
WHERE [Level]=@l
      AND Station=@Station_Stop
IF @@ROWCOUNT =0 --如果未有可以到达的线路,则显示处理结果表备查
      SELECT * FROM #
GO

--调用
EXEC p_qry N'站A',N'站L'
/*--结果
起点站  终点站  乘车线路
---------- ------------ -----------------------------------------------------------
站A    站L    (8路: 站A->站B->站C->站D->站J->站L)
--*/


 

posted on 2007-07-06 10:35  HTTP500  阅读(206)  评论(0编辑  收藏  举报