zoukankan      html  css  js  c++  java
  • 计算从A地出发到各个地方的路径及距离

    数据库环境: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.效果

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

  • 相关阅读:
    将Linux下python默认版本切换成替代版本
    ubuntu下卸载python2和升级python3.5
    Linux下安装theano
    梯度下降法
    使用Matlab实现对图片的缩放
    matlab 中的删除文件
    解决aws ec2的centos7设置时区无效
    yum安装redis5/mq/consul
    django web应用runserver模式下cpu占用高解决办法
    N1如何完美刷入armbian系统教程
  • 原文地址:https://www.cnblogs.com/boss-he/p/4721783.html
Copyright © 2011-2022 走看看