我有一个包含ID及其相关坐标的数据库。 如果我有两个ID,那么返回这两点之间的线性距离的最有效的TSQL查询是什么? 我知道如何使用4个变量和3个select语句来实现它,但有更好的方法吗?
ID | X | Y
1 | 10 | 15
2 | 12 | 20
鉴于ID 1和2找到它们之间的线性距离。
答案 0 :(得分:2)
我不确定你的意思是"线性距离",但这是获得曼哈顿距离的一种方法:
select abs(p1.x - p2.x) + (abs(p1.y - p2.y)
from points p1 cross join
points p2
where p1.id = 1 and p2.id = 2;
欧几里德距离将使用适当的函数。
答案 1 :(得分:0)
以GL的欧几里德距离代码为基础:
DECLARE @points TABLE (ID INT IDENTITY, X DECIMAL(8,4), Y DECIMAL(8,4))
INSERT INTO @points (X,Y) VALUES (10,15),(12,20)
SELECT * FROM @points
SELECT ROUND(SQRT((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)),2)
FROM @points p1 CROSS JOIN
@points p2
WHERE p1.id = 1 AND p2.id = 2;
显然你有自己的表本身的代码,但这将自己运行,你可以看到它给出5.39的结果,四舍五入,因为我告诉它。
答案 2 :(得分:0)
您可以使用方便的功能
DISTANCE(POINT(p1.x, p1.y), POINT(p2.x, p2.y))