[SQL]公交新路问题
--解答一
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]公交新路问题的更多相关文章
- 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...
- sql server中自连接的使用
一.用SQL自连接查询处理列之间的关系 SQL自身连接,可以解决很多问题.下面举的一个例子,就是使用了SQL自身连接,它解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系.SQL代码如下: ...
- 自从学了SQL编程,哪里不会点哪里!!!
在学习SQL编程前,先给大家分享几个段子吧,咱先乐呵乐呵! <桃花庵--程序员版> 写字楼里写字间,写字间中程序员:程序人员写程序,又将程序换酒钱: 酒醒只在屏前坐,酒醉还来屏下眠:酒醉酒 ...
- 在SQL Server实现最短路径的搜索
开始 这是去年的问题了,今天在整理邮件的时候才发现这个问题,感觉顶有意思的,特记录下来. 在表RelationGraph中,有三个字段(ID,Node,RelatedNode),其中Node和Rela ...
- SQL Server 2014 新特性:IO资源调控
谈谈我的微软特约稿:<SQL Server 2014 新特性:IO资源调控> 2014-07-01 10:19 by 听风吹雨, 570 阅读, 16 评论, 收藏, 收藏 一.本文所涉及 ...
- [原创] 思维导图笔记(二):SQL
为了补一补知识体系上的缺漏,最近找了看完了Ben Forta写的<Sams Teach Yourself SQL in 10 Minutes>,翻译过来叫<SQL必知必会>.从 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
- sql中自连接的使用
一.用SQL自连接查询处理列之间的关系 SQL自身连接,可以解决很多问题.下面举的一个例子,就是使用了SQL自身连接,它解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系.SQL代码如下: ...
- ES SQL使用说明文档
ES SQL使用说明文档 一.Elasticsearch术语介绍 l 接近实时(NRT): Elasticsearch 是一个接近实时的搜索平台.这意味着,从索引一个文档直到这个文档能够被搜索到有一 ...
随机推荐
- Keepalived+MySQL实现高可用(转)
http://www.cnblogs.com/wingsless/p/4033093.html MHA高可用 http://www.cnblogs.com/gomysql/p/3856484.ht ...
- MySQL explain key_len 大小的计算
总结: 变长字段需要额外的2个字节,固定长度字段不需要额外的字节.而null都需要1个字节的额外空间,所以以前有个说法:索引字段最好不要为NULL,因为NULL让统计更加复杂,并且需要额外一个字节的存 ...
- VMware 虚拟机Red Hat 5.9 交换区及硬盘空间调整
首先要通过VMware设置简单实现内存扩大.但是系统中的/swap应该如何设置呢? 1. 创建swap 文件 使用如下命令: #dd if=/dev/zero of=/swap/swapfile bs ...
- Android启动画面实现
每个Android应用程序启动之后都会出现一个Splash启动界面,显示产品LOGO.公司LOGO或者开发者信息.如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥 ...
- Django数据库操作
刚学到Django的数据库操作,把它记录下来,方便以后查看: 在Django中定义数据库表,并使用Django提供的方法来对数据库进行操作(增.删.改.查) 1.定义3个数据库表: class Gro ...
- nginx的https配置
测试自签名的ssl证书 首先执行如下命令生成一个key openssl genrsa -des3 - 然后他会要求你输入这个key文件的密码.不推荐输入.因为以后要给nginx使用.每次reload ...
- erlang的escript脚本
参考霸爷的博客 测试例子 #!/usr/bin/env escript %%! -smp enable -sname mmcshadow -mnesia debug verbose[/color] m ...
- 在Myeclipse中移除项目对Hibernate的支持
在Myeclipse中移除项目对Hibernate的支持 在使用Hibernate框架进行开发时可能会遇到配置错误或者需要删除Hibernate支持的情况.下面就说一下如何彻底移除项目的Hiberna ...
- SVN设置实例
D:\scmserver\SVNROOT\safeControl,该SVN项目下,有erSystem和hcSystem两个项目.现在人员有两种类型的人,一个内部人员,一个是佰钧成人员. 设置要求: 1 ...
- [OpenGL ES 03]3D变换:模型,视图,投影与Viewport
[OpenGL ES 03]3D变换:模型,视图,投影与Viewport 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循“署名-非商业用途-保持一致”创作公用协议 系列 ...