首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

找到一个sql老题~还算精典~做完分享一下~(砍破破破)解决思路

2012-03-15 
找到一个sql老题~还算精典~做完分享一下~~(砍破破破)--问站A-站L最短乘车路线(SQL问题)CREATETABLET_Line(

找到一个sql老题~还算精典~做完分享一下~~(砍破破破)
--问站A-站L最短乘车路线(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
select   *   from   T_Line

--问A  -  L最短乘车路线

/*--例如
起点站       终点站             乘车线路
----------   ------------   -----------------------
站A                   站L                   (8路:   站A-> 站B-> 站C-> 站D-> 站J-> 站L)
--*/


create   proc   p_wwww
@st   varchar(10),
@en   varchar(10)
as
if(@st <> @en)
begin
select   *,cast(station   as   varchar(500))+ '乘 '+id   line,
1   cunt,cast(station   as   varchar(500))[order],1[degree]   into   #  
from   t_line   where   station   =   @st

declare   @cunt   int
set   @cunt=0
while(@@rowcount> 0)
begin
set   @cunt=@cunt+1
insert   into   #
select   a.*,
line+case   when   a.id <> b.id   then   '- '+a.station+ '转 '+a.id   else   '- '+a.station   end,
@cunt+1,[order]+ '- '+a.station,case   when   a.id <> b.id   then   b.degree+1   else   b.degree   end
from   t_line   a
join
(select   a.station[newstation],b.id,b.station[oldstation],b.line,[order],b.degree   from  
(select   *   from   t_line)a
join
(select   *   from   #   where   cunt=@cunt   and   station <> @en)b


on   b.id=a.id   and   abs(b.orders-a.orders)=1)b
on   b.newstation   =   a.station
where   charindex(a.station,[order])=0
end

select   @st[起点站],@en[终点站],a.line[乘车线路]   from   #   a
join  
(select   [order],min(degree)degree   from   #   where   station   =   @en   group   by   [order])b
on   b.[order]=a.[order]   and   b.degree=a.degree
end
else
select   @st[起点站],@en[终点站], '无需乘车 '[乘车线路]


--------------------------------------------------测试
exec   p_wwww   '站F ', '站A '
exec   p_wwww   '站A ', '站A '
exec   p_wwww   '站D ', '站J '
exec   p_wwww   '站A ', '站L '
exec   p_wwww   '站A ', '站Q '




[解决办法]
2
[解决办法]
3
[解决办法]
4?
[解决办法]
邹老大不是写过吗?
[解决办法]
天才~!
绝对的天才!~
[解决办法]
看看....


[解决办法]
11
[解决办法]
顶!!
[解决办法]
没有注释阿,
[解决办法]
砍破,还有几个脑细胞
[解决办法]
純頂貼
[解决办法]
高手
[解决办法]
高手手

[解决办法]
接受反驳中~~因为我真不知道注释能说明什么。。。

----------------------------------------------

你真是聪明人

我就很苯了自己写的东西如果不写注释过两天我我还真不知道怎么看

LZ真聪明人也!
[解决办法]
純頂貼~~
[解决办法]
---适当献血有利于骨髓的造血功能

纯属扯淡 :)
[解决办法]
O_o
[解决办法]
高手!!

[解决办法]
评价:楼主编程习惯很差!
注释是为了增强程序可读性的
[解决办法]
不错不错 路过

热点排行
Bad Request.