--解答一
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. WebApiThrottle限流框架

    ASP.NET Web API Throttling handler is designed to control the rate of requests that clients can make ...

  2. ASP.NET MVC2中Controller向View传递数据的三种方式

    转自:http://www.cnblogs.com/zhuqil/archive/2010/08/03/Passing-Data-from-Controllers-to-View.html 在Asp. ...

  3. javascript 变量的作用范围

    来自: http://hanxin0311.iteye.com/blog/181127 1.根据作用范围不同,变量有全局变量和局部变量两种.在函数里定义的变量为局部变量,局部变量只在函数内有效. 如果 ...

  4. eclipse 怎么新建工作空间workspace

    打开eclipse 点击文件“File”菜单切换工作空间“Switch Workspace”>其它“Other” 点击“Browser”选择新的工作空间目录. 选择新的工作空间目录,点击确定. ...

  5. 安装Android sdk 4.4(19)出现问题的解决方案

    刚更新了Android sdk 19,但是出现以下两个问题,浪费我2个小时的时间,现在将我遇到的问题和解决方法总结如下: 问题1:打开eclipse点更新后,出现This Android SDK re ...

  6. 拖动控件 javascript原生,兼容IE6-11、chrome、firefox、Opera、Safari

    鼠标拖动元素,对于初学者来说,是一个很难的话题,其实只要应用好事件,就能很好的控制拖动的对象,其主要事件是 mousedown,mousemove,mouseup,其原理是在鼠标点击元素时,在给定鼠标 ...

  7. java.io.IOException: ORA-22920: 未锁定含有 LOB 值的行

         究其原因是因为没有锁定要更新的行记录.将 mysql="select filebody from filelist where filename=?"中的SQL语句加上 ...

  8. 客户端TortoiseSVN的安装及使用方法

    一.客户端TortoiseSVN的安装 运行TortoiseSVN程序,点击Next,下面的截图顺序即为安装步骤: 图1: 图2: 图3: 图4: 点击Finish按钮后会提示重启系统,其实不重启也没 ...

  9. SharePoint 2010 最佳实践学习总结------第1章 SharePoint Foundation开发基础

    ----前言 这段时间项目出在验收阶段,不是很忙,就潜心把SharePoint学一下,不求有多深刻,初衷只是先入门再说.后续会发布一系列的学习总结.主要学习的书籍为<SharePoint2010 ...

  10. 利用百度地图API,获取经纬度坐标

    利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...