我正在尝试执行这样的查询:
SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
FROM Requests
WHERE Distance < 2
ORDER BY Distance DESC
错误说,没有距离列。 我尝试过一次,但它会降低查询性能
SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
FROM Requests
WHERE dbo.CalculateDistance(Lat,Lon,@lat,@lon) < 2
--ORDER BY Distance DESC
在不进行第二次计算的情况下,如何实现上述查询?
致以诚挚的问候
迈拉
最佳答案
我发现下面的链接建议您对其值进行嵌套选择和过滤;在这种情况下,标量计算将仅执行一次。
所以你应该能够做类似的事情
SELECT Id, Name, Distance FROM (
SELECT Id,Name,Distance=dbo.CalculateDistance(Lat,Lon,@lat,@lon)
FROM Requests) derived
WHERE Distance < 2
ORDER BY Distance DESC
我简单地看了一下执行计划,标量计算只发生一次。但您当然应该检查索引等的使用。
我希望它能提供一些帮助。
关于t-sql - where 子句中的动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6262244/