数据库环境:SQL SERVER 2005

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

aaarticlea/png;base64,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" alt="" />

求从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 );

  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

  3.效果

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIoAAABgCAIAAABNOn3XAAAFVUlEQVR4nO1czWrjMBCeh2oW7HcJoQf7QQoLPZk8RWHZ7MmQZ+ih0KshL9BLwN3rGrwHy7Ikj/yT2tZMOh+iOIpIZvR5RvJ8UeH3n1wa2QaVgY/PfxVbsDbeB6GHNIQe0hB6SON70FNkUZQVGxqzFL4TPShJtJn7TvTMfYsABunJE4AkV1f6IsqKKk9AI8mNgXrE5kDoKbJIW2lEj+6OslxdRllRuU41zGWJ0VNV5ijV033L8n4PR0/rUJ6YFhf9IUUWuURuDcz41pTmllHGtxY27w9kvCKLTA6irDA/0/5QY8ySGElujSt5EmV5FqmrovUdzJtGOR2MnZ7x5mRZa48yvXPEHIZFW+8T7G8BEwvzM7b25EmUZUlz07UcWQlMW5wnkOSavu0xmR4FlRG6zp5TU+lZ8X4c3RrkSXtL6AxnxUjnVJ6skn6nYiC5FVnURYN6Uakpz016vHlrMLmZi9DCVI3SY2fw9tutmG59CLUpaDC0NYgi8943tgZ6Q6AWVssphJ4K2Rp0PVtvDWYh3LJTVRXzpwIfFqIncGKrKqGHOFgb74PQQxrw8flPGtkGpQ0AYP33zmAlt7IsP65/mbayLOv7AkIPAASf6NsaAISez4Uh0UMaEj2kMTN6fj0C/Hh66/W/PT90xRBsAInoOaeQno0XCm1fvyc45kXPywH2h8eHn+8YPY8v+nr3/Eorei7H2Jr4yzF2Ly/HOD5eVI+6Co5Z0fP+tHt8uZ72/dk36bme9t013ejRUGwYb+LjQmBO9Lw9PxxOH9f3p10vfVGPngbotKvoMUOGTvjMiJ7Xnz/2v9SFm98Yrj0NLscY4uOl5kOPJ3ren3aGYrt7fr3+fTkAAMDhRCS5zY0ezU3NiB7ceZXZNFV2iFj0YNmPXvSY3Dhv8lt7nITm5jdn7aEfPefU3T5z3rmd9jAQLs7aA80SRTl6ukccAAAVReyfe4i3b181oN2k5ka6SfSQbvcZPaZ0KtFDCmVZIgIwBU1alOwGbnILfcfcDtbGoxB6SEPoIQ2hhzRm0nNOAbB6lFYjg9ZExugxS51mWUd5xKOoMzD6nEKapgg/VhXRUIq3hd94V8xGqtJcSqL+wZdjnJ7rM8KP41EgB2dET99CLoKCd2zDDjr3bl8YB+fRY6c2NnKcb6hiB7Xe7Qrj4Ax6zil0qYzVbw08I+3VPz5e9FrqOFfXDKLHQGM7c3p07KgXtv3s1h4DzH5IhY4bmX/qO7cG3bQbJrZpjvPOrUvVCg4F/J57uqcc7Rj75x7iYG08CqGHNIQe0hB6SKPsi9mhTbodrI1HUaJitoAOJLnRhdBDGkIPaQg9pDGTnkliNq6mblDyGTBeF2wQNZvXyeyB0UNitl+ItA869U/WLAav8V3JUJXdGJ/M9g8eFLO9Mv523k5Ibn4pkbWgUNdjYrYveja8F8fpQbSOO1FLx8Rs39pDhp7GRoQcXiezPSPHxOxeclPvxjEReuq6dsKH5clsfOComG15HSa7TdlYa2u4nsxGx42L2dZvlLz/PiDIzg3Zp/E9mY0N+6qYTee5xz2EjXYSiR2pGhCH0EMaQg9pCD2kUYqYTRmliNnEIcmNLoQe0hB6SEPoIY2Z9KwhZtsFoa+UVPzGTzqHzb6os4qYvVwFcpCesQIo55Jog3XE7A3omXIOm7WgUNeridnb0GOntr74xlyOW0/Mdtee229cr/ETzmFzp2dhMdt/qvtLzoyO8ZHBnJ71xOwQ9Nzb2rOimL0+PZPOYXPeua0pZveee26em4HomXIOm/1zD3GwNh6F0EMaQg9pCD2kUYqYTRmliNmUUdf1fxxTT/9YzhOTAAAAAElFTkSuQmCC" alt="" />

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

计算从A地出发到各个地方的路径及距离的更多相关文章

  1. 深度 | AI芯片之智能边缘计算的崛起——实时语言翻译、图像识别、AI视频监控、无人车这些都需要终端具有较强的计算能力,从而AI芯片发展起来是必然,同时5G网络也是必然

    from:https://36kr.com/p/5103044.html 到2020年,大多数先进的ML袖珍电脑(你仍称之为手机)将有能力执行一整套任务.个人助理将变的更加智能,它是打造这种功能的切入 ...

  2. 巧妙地用二叉树完成算式计算算法<计算器,二叉树,C++,独辟蹊径>

    #01.引言,我们知道算式计算的问题是栈里面一个非常经典的题目.但是用栈来实现是一个非常麻烦的过程,第一要解决算式判断,是否为符合规则的算式,第二要由中最表达式转化为后缀表达式.这两个部分是栈实现计算 ...

  3. 1549: Navigition Problem (几何计算+模拟 细节较多)

    1549: Navigition Problem Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 256 Mb     Su ...

  4. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  5. 聊聊GIS中的坐标系|再版 详细定义、计算及高程系统

    本篇讲坐标系统的详细定义,有关坐标系的变换公式,以及简单说说高程坐标系统. 本文约6000字,阅读时间建议45分钟.硬内容比较多,如有疏漏错误请指出,建议有兴趣的朋友进一步阅读. 作者:博客园/B站/ ...

  6. Redis系列9:Geo 类型赋能亿级地图位置计算

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  7. PHP版根据经纬度和半径计算出经纬度的范围

    百度地图提供了范围搜索的功能,但是它使用的是百度自己的数据,但是有时候我们需要使用自己的数据,显示在地图上.比如给定两个参数:指定位置(某一处的经纬度lnglat)和搜索半径(r),搜索指定范围内的数 ...

  8. 计算N个点和M个点之间的距离

    KNN中,训练样本有train_count个,测试样本有test_count个,每个样本有attr_count个属性.现在需要快速计算test_count个测试样本和train_count个样本之间的 ...

  9. php计算两个坐标(经度,纬度)之间距离的方法

    本文实例讲述了php计算两个坐标(经度,纬度)之间距离的方法.分享给大家供大家参考.具体如下: 这里使用php计算两个坐标(经度,纬度)之间的距离,返回结果为米或者千米 function distan ...

随机推荐

  1. codeforces --- 279C Ladder

    C. Ladder time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  2. Hadoop-MapReduce之自定义数据类型

    以下是自定义的一个数据类型,有两个属性,一个是名称,一个是开始点(可以理解为单词和单词的位置) MR程序就不写了,请看WordCount程序. package cn.genekang.hadoop.m ...

  3. DS1302-演示代码

    参考DS1302数据手册,尽管数据手册是英文,但是很有帮助,再结合网上众多的代码写出了下面这个例子,除了涓流充电(trickle charger)功能没使用外,内部的RAM和寄存器功能都使用到了,包括 ...

  4. Python默认编码错误SyntaxError: Non-ASCII character '\xe5'之解决方法

    在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* 解决方法: py ...

  5. 异常-JAVA

    #异常   ##1.异常处理概述   1.异常时程序在执行过程中所产生的问题.导致异常的原因的有很多种,包括:   1. 用户输入了无效数据   2. 找不到一个需要打开的文件   3. 在通讯过程中 ...

  6. BOM、DOM学习笔记——JavaScript

    1.BOM的概述    browser object modal :浏览器对象模型.    浏览器对象:window对象.    Window 对象会在 <body> 或 <fram ...

  7. CAS SSO:汇集配置过程中的错误解决方法

    本教程为gevin.me原创文章,转载请注明: CAS SSO:配置过程中的错误解决方法 | Gevin’s Blog 本文将收集在配置CAS SSO遇到的所有错误,希望对大家有帮助,也方便下次搭建的 ...

  8. java数据库连接池dbcp的使用

    近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开发模式 ...

  9. Android 完美退出 App (Exit)

    最近两天为了解决Android上面退出程序问题折腾了半死,在google & baidu 上面找了很久.很久出来的完全千篇一律,说的方法有三,但是经过我试验后全部不行. 三个方法分别是: ki ...

  10. 源码解析之–YYAsyncLayer异步绘制

    来源:伯乐在线专栏作者 - Shelin 链接:http://ios.jobbole.com/86878/ 点击 → 了解如何加入专栏作者 前言 YYAsyncLayer是异步绘制与显示的工具.最初是 ...