首页 > 开发 > 综合 > 正文

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

2024-07-21 02:46:09
字体:
来源:转载
供稿:网友
计算从A地出发到各个地方的路径及距离

数据库环境:SQL SERVER 2005

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

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

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

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

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

  1.建表,导入测试数据

CREATE TABLE bus    (      dstart VARCHAR(4) ,      dend VARCHAR(4) ,      distance INT    );INSERT  INTO busVALUES  ( 'A', 'B', 120 );INSERT  INTO busVALUES  ( 'B', 'C', 200 );INSERT  INTO busVALUES  ( 'A', 'D', 150 );INSERT  INTO busVALUES  ( 'D', 'M', 300 );INSERT  INTO busVALUES  ( 'C', 'E', 180 );INSERT  INTO busVALUES  ( '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.效果

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表