标签:
数据库环境: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 );
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.效果
看到这题目,刚好做下练手,并分享给大家。大家若有更好的实现方式,欢迎分享,一起学习。
标签:
原文地址:http://www.cnblogs.com/boss-he/p/4721783.html