zoukankan      html  css  js  c++  java
  • 最短乘车路线查询示例.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

    --乘车线路查询存储过程
    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)
    --*/

  • 相关阅读:
    三种方式重启NGINX 简单
    转MongoDB、HandlerSocket和MySQL性能测试及其结果分析 简单
    php ini_set post_max_size,upload_max_filesize 简单
    grep 命令 简单
    ANSI,GBK,UTF8,UTF16LE,UTF16BE 简单
    提升工作效率软件 简单
    会议记录 简单
    第一章 :zabbix监控
    第七章 :分布式监控与SNMP监控
    linux系统安装SNMP(可用)
  • 原文地址:https://www.cnblogs.com/dushu/p/2531892.html
Copyright © 2011-2022 走看看