--解答一
CREATE TABLE T_Line(
ID nvarchar(), --公交线路号
Station nvarchar(), --站点名称
Orders int) --行车方向(通过它反应每个站的上一个、下一个站)
INSERT T_Line
SELECT N'8路' ,N'站A', UNION ALL
SELECT N'8路' ,N'站B', UNION ALL
SELECT N'8路' ,N'站C', UNION ALL
SELECT N'8路' ,N'站D', UNION ALL
SELECT N'8路' ,N'站J', UNION ALL
SELECT N'8路' ,N'站L', UNION ALL
SELECT N'8路' ,N'站M', UNION ALL
SELECT N'20路' ,N'站G', UNION ALL
SELECT N'20路' ,N'站H', UNION ALL
SELECT N'20路' ,N'站I', UNION ALL
SELECT N'20路' ,N'站J', UNION ALL
SELECT N'20路' ,N'站L', UNION ALL
SELECT N'20路' ,N'站M', UNION ALL
SELECT N'255路',N'站N', UNION ALL
SELECT N'255路',N'站O', UNION ALL
SELECT N'255路',N'站P', UNION ALL
SELECT N'255路',N'站Q', UNION ALL
SELECT N'255路',N'站J', UNION ALL
SELECT N'255路',N'站D', UNION ALL
SELECT N'255路',N'站E', UNION ALL
SELECT N'255路',N'站F',
GO --乘车线路查询存储过程
CREATE PROC p_qry
@Station_Start nvarchar(),
@Station_Stop nvarchar()
AS
SET NOCOUNT ON
DECLARE @l int
SET @l=
SELECT ID,Station,
Line=CAST('('+RTRIM(ID)+': '+RTRIM(Station) as nvarchar()),
Orders=Orders,
[Level]=@l
INTO # FROM T_Line
WHERE Station=@Station_Start
WHILE @@ROWCOUNT>
AND NOT EXISTS(SELECT * FROM # WHERE Station=@Station_Stop)
BEGIN
SET @l=@l+
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-
AND(a.Station=b.Station AND a.ID<>b.ID
OR a.ID=b.ID AND(
a.Orders=b.Orders+
OR
a.Orders=b.Orders-))
AND LEN(a.Line)<
AND PATINDEX('%[ >]'+b.Station+'[-)]%',a.Line)=
END
SELECT N'起点站'=@Station_Start
,N'终点站'=@Station_Stop
,N'乘车线路'=Line+N')'
FROM #
WHERE [Level]=@l
AND Station=@Station_Stop
IF @@ROWCOUNT = --如果未有可以到达的线路,则显示处理结果表备查
SELECT * FROM #
GO --调用
EXEC p_qry N'站A',N'站L'
drop table T_Line
drop procedure p_qry
/*--结果
起点站 终点站 乘车线路
---------- ------------ -----------------------------------------------------------
站A 站L (8路: 站A->站B->站C->站D->站J->站L)
--*/ --解答二
CREATE TABLE T_Line(busID nvarchar(),stationID nvarchar(),staTionName nvarchar(),stationSort int)
INSERT T_Line
SELECT N'B0280017',N'S0280030',N'荷花池', UNION ALL
SELECT N'B0280017',N'S0280028',N'火车北站', UNION ALL
SELECT N'B0280017',N'S0280289',N'二环北二段', UNION ALL
SELECT N'B0280018',N'S0280011',N'人名北路', UNION ALL
SELECT N'B0280018',N'S0280028',N'火车北站', UNION ALL
SELECT N'B0280018',N'S0280213',N'五块石', UNION ALL
SELECT N'B0280019',N'S0280013',N'五块石', UNION ALL
SELECT N'B0280019',N'S0280014',N'二环路东二段', UNION ALL
SELECT N'B0280019',N'S0280215',N'二环东三段',
GO --乘车线路查询存储过程
CREATE PROC p_qry
@Station_Start nvarchar(),
@Station_Stop nvarchar()
AS
SET NOCOUNT ON
DECLARE @l int
SET @l=
SELECT busID,staTionName,
Line=CAST('('+RTRIM(busID)+': '+RTRIM(staTionName) as nvarchar()),
stationSort=stationSort,
[Level]=@l
INTO # FROM T_Line
WHERE staTionName=@Station_Start
WHILE @@ROWCOUNT>
AND NOT EXISTS(SELECT * FROM # WHERE staTionName=@Station_Stop)
BEGIN
SET @l=@l+
INSERT #(Line,busID,staTionName,stationSort,[Level])
SELECT
Line=a.Line+CASE
WHEN a.busID=b.busID THEN N'->'+RTRIM(b.staTionName)
ELSE N') ∝ ('+RTRIM(b.busID)
+N': '+RTRIM(b.staTionName) END,
b.busID,b.staTionName,b.stationSort,@l
FROM # a,T_Line b
WHERE a.[Level]=@l-
AND(a.staTionName=b.staTionName AND a.busID<>b.busID
OR a.busID=b.busID AND(
a.stationSort=b.stationSort+
OR
a.stationSort=b.stationSort-))
AND LEN(a.Line)<
AND PATINDEX('%[ >]'+b.staTionName+'[-)]%',a.Line)=
END
SELECT N'起点站'=@Station_Start
,N'终点站'=@Station_Stop
,N'乘车线路'=Line+N')'
FROM #
WHERE [Level]=@l
AND staTionName=@Station_Stop
IF @@ROWCOUNT = --如果未有可以到达的线路,则显示处理结果表备查
SELECT * FROM #
GO --调用
EXEC p_qry N'荷花池',N'二环东三段' drop proc p_qry ----删除存储过程
drop table T_Line ----删除表 /* 结果 起点站 终点站 乘车线路
*/ --解答三
CREATE TABLE T_Line(busID nvarchar(),stationID nvarchar(),staTionName nvarchar(),stationSort int)
INSERT T_Line
SELECT N'B0280017',N'S0280030',N'荷花池', UNION ALL
SELECT N'B0280017',N'S0280028',N'火车北站', UNION ALL
SELECT N'B0280017',N'S0280289',N'二环北二段', UNION ALL
SELECT N'B0280018',N'S0280011',N'人名北路', UNION ALL
SELECT N'B0280018',N'S0280028',N'火车北站', UNION ALL
SELECT N'B0280018',N'S0280213',N'五块石', UNION ALL
SELECT N'B0280019',N'S0280013',N'五块石', UNION ALL
SELECT N'B0280019',N'S0280014',N'二环路东二段', UNION ALL
SELECT N'B0280019',N'S0280215',N'二环东三段',
GO --乘车线路查询存储过程
CREATE PROC p_qry
@Station_Start nvarchar(),
@Station_Stop nvarchar()
AS
SET NOCOUNT ON
DECLARE @l int
SET @l=
SELECT busID,staTionName,
Line=CAST('('+RTRIM(busID)+': '+RTRIM(staTionName) as nvarchar()),
stationSort=stationSort,
[Level]=@l
INTO # FROM T_Line
WHERE staTionName=@Station_Start
WHILE @@ROWCOUNT>
AND NOT EXISTS(SELECT * FROM # WHERE staTionName=@Station_Stop)
BEGIN
SET @l=@l+
INSERT #(Line,busID,staTionName,stationSort,[Level])
SELECT
Line=a.Line+CASE
WHEN a.busID=b.busID THEN N'->'+RTRIM(b.staTionName)
ELSE N') ∝ ('+RTRIM(b.busID)
+N': '+RTRIM(b.staTionName) END,
b.busID,b.staTionName,b.stationSort,@l
FROM # a,T_Line b
WHERE a.[Level]=@l-
AND(a.staTionName=b.staTionName AND a.busID<>b.busID
OR a.busID=b.busID AND(
a.stationSort=b.stationSort+
OR
a.stationSort=b.stationSort-))
AND LEN(a.Line)<
AND PATINDEX('%[ >]'+b.staTionName+'[-)]%',a.Line)=
END
SELECT N'起点站'=@Station_Start
,N'终点站'=@Station_Stop
,N'乘车线路'=Line+N')'
FROM #
WHERE [Level]=@l
AND staTionName=@Station_Stop
IF @@ROWCOUNT = --如果未有可以到达的线路,则显示处理结果表备查
SELECT * FROM #
GO --调用
EXEC p_qry N'荷花池',N'二环东三段' drop proc p_qry
drop table T_Line /* 结果 起点站 终点站 乘车线路
---------- ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
荷花池 二环东三段 (B0280017: 荷花池->火车北站) ∝ (B0280018: 火车北站->五块石) ∝ (B0280019: 五块石->二环路东二段->二环东三段) */

[SQL]公交新路问题的更多相关文章

  1. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

  2. sql server中自连接的使用

    一.用SQL自连接查询处理列之间的关系 SQL自身连接,可以解决很多问题.下面举的一个例子,就是使用了SQL自身连接,它解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系.SQL代码如下: ...

  3. 自从学了SQL编程,哪里不会点哪里!!!

    在学习SQL编程前,先给大家分享几个段子吧,咱先乐呵乐呵! <桃花庵--程序员版> 写字楼里写字间,写字间中程序员:程序人员写程序,又将程序换酒钱: 酒醒只在屏前坐,酒醉还来屏下眠:酒醉酒 ...

  4. 在SQL Server实现最短路径的搜索

    开始 这是去年的问题了,今天在整理邮件的时候才发现这个问题,感觉顶有意思的,特记录下来. 在表RelationGraph中,有三个字段(ID,Node,RelatedNode),其中Node和Rela ...

  5. SQL Server 2014 新特性:IO资源调控

    谈谈我的微软特约稿:<SQL Server 2014 新特性:IO资源调控> 2014-07-01 10:19 by 听风吹雨, 570 阅读, 16 评论, 收藏, 收藏 一.本文所涉及 ...

  6. [原创] 思维导图笔记(二):SQL

    为了补一补知识体系上的缺漏,最近找了看完了Ben Forta写的<Sams Teach Yourself SQL in 10 Minutes>,翻译过来叫<SQL必知必会>.从 ...

  7. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  8. sql中自连接的使用

    一.用SQL自连接查询处理列之间的关系 SQL自身连接,可以解决很多问题.下面举的一个例子,就是使用了SQL自身连接,它解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系.SQL代码如下: ...

  9. ES SQL使用说明文档

    ES SQL使用说明文档 一.Elasticsearch术语介绍 l  接近实时(NRT): Elasticsearch 是一个接近实时的搜索平台.这意味着,从索引一个文档直到这个文档能够被搜索到有一 ...

随机推荐

  1. Linux-LVS+keepalived-Testing

    LVS:Linux Virtual Server+++++++++++++Info+++++++++++VIP:172.18.20.222LVS-Master IP:172.18.20.206LVS- ...

  2. 用原生javascript做的一个打地鼠的小游戏

    学习javascript也有一段时间了,一直以来分享的都是一些概念型的知识,今天有空做了一个打地鼠的小游戏,来跟大家分享一下,大家也可以下载来增加一些生活的乐趣,下面P出代码:首先是HTML部分代码: ...

  3. Review Board——在线代码审查工具

    代码审查(Code Review)不但可以提高质量,而且还是一个知识共享和指导的极好的手段.不幸的是,准备工作的辛苦和工具支持的缺乏让代码审查很容易被延至“稍后再议”.Review Board的目标便 ...

  4. 服务器安全狗,支持Linux/windows

    安全狗: www.safedog.cn 防DDOS  sql注入检测

  5. smarty变量

    前台: 注释的两种方式:<{**}>和<!--注释html代码-->比如: <{* <div style="width:100px; height:100 ...

  6. [转]UOS 中的虚拟网络设备

    随着网络技术,虚拟化技术的发展,越来越多的高级网络设备被加入了到了 Linux 中,这些设备在 UOS 中起到了广泛而关键的作用,包括 Open vSwitch.TAP 设备.Veth 设备等等,梳理 ...

  7. Linux命令之WC

    $ wc story.txt39 237 1901 story.txt● Use -l for only line count● Use -w for only word count● Use -c ...

  8. webstorm 10 设置文件的默认编码

    我在使用webstorm时,发现文件的默认编码是GBK 然后我找到了点击此处可以修改这个文件的编码,但是以后新建文件和项目默认生成的文件还是GBK, 设置项目文件的默认编码可以在 File----Se ...

  9. Haroopad 写 markdown文本

    很好用,推荐大家都来用. http://www.csdn.net/article/2014-05-05/2819623

  10. Hadoop学习5--配置本地开发环境(Windows+Eclipse)

    一.导入hadoop插件到eclipse 插件名称:hadoop-eclipse-plugin-2.7.0.jar 我是从网上下载的,还可以自己编译. 放到eclipse安装目录下的plugins文件 ...