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.效果

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

  • 相关阅读:
    请简单介绍spring支持的常用数据库事务传播属性和事务隔离级别
    Spring Bean的作用域
    成员变量与局部变量的区别
    递归与迭代
    方法参数的传递机制 ---- 值传递
    windows phone 动画 当子控件超出父控件返回时
    把dataset 输出到 excel
    代码段
    c++ 学习纪录
    做自己的代码生成器
  • 原文地址:https://www.cnblogs.com/boss-he/p/4721783.html
Copyright © 2011-2022 走看看