码迷,mamicode.com
首页 > 其他好文 > 详细

计算从A地出发到各个地方的路径及距离

时间:2015-08-11 20:50:25      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

数据库环境:SQL SERVER 2005

如题,现有bus表数据如下,dstart是起点,dend是终点,distance是两地的距离。

技术分享

求从A地出发到各个地方的距离。

有经验的人一看,就知道题目关于树形查询的。SQL SERVER 2005数据库没有提供树形查询相关的函数,

因此,可以通过CTE递归实现。

题目比较简单,就不写什么分析思路了,直接看代码实现。

  1.建表,导入测试数据

技术分享
CREATE TABLE bus
    (
      dstart VARCHAR(4) ,
      dend VARCHAR(4) ,
      distance INT
    );
INSERT  INTO bus
VALUES  ( ‘A‘, ‘B‘, 120 );
INSERT  INTO bus
VALUES  ( ‘B‘, ‘C‘, 200 );
INSERT  INTO bus
VALUES  ( ‘A‘, ‘D‘, 150 );
INSERT  INTO bus
VALUES  ( ‘D‘, ‘M‘, 300 );
INSERT  INTO bus
VALUES  ( ‘C‘, ‘E‘, 180 );
INSERT  INTO bus
VALUES  ( ‘F‘, ‘M‘, 260 );
View Code

  2.实现

技术分享
WITH    x0 ( dstart, dend, way, distance )
          AS ( SELECT   dstart ,
                        dend ,
                        CONVERT(VARCHAR (20), dstart + ‘-‘ + dend) AS way ,
                        distance
               FROM     bus
               WHERE    dstart = ‘A‘
               UNION ALL
               SELECT   bus .dstart ,
                        bus.dend ,
                        CONVERT(VARCHAR (20), x0. way + ‘-‘ + bus .dend) AS way ,--路径
                        bus.distance + x0.distance AS distance --距离
               FROM     bus ,
                        x0
               WHERE    bus .dstart = x0 .dend
             )
    SELECT  way ,
            distance
    FROM    x0
View Code

  3.效果

技术分享

看到这题目,刚好做下练手,并分享给大家。大家若有更好的实现方式,欢迎分享,一起学习。

计算从A地出发到各个地方的路径及距离

标签:

原文地址:http://www.cnblogs.com/boss-he/p/4721783.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!