我正在尝试编写具有以下条件的SQL select:
我只想使用CASE
语句
以下是我的查询
declare @distance int
set @distance = 3000
select
ROUND((dbo.GetDistance(@UserLat, @UserLon, Latitude, Longitude) * 1000), 0) AS Distance
from
messages
order by
Distance desc
答案 0 :(得分:1)
您可以使用以下查询:
SELECT *
FROM (
SELECT *,
ROUND((dbo.GetDistance(@UserLat, @UserLon, Latitude, Longitude)*1000),0) AS Distance
FROM messages ) s
WHERE (@distance IS NULL) OR (s.Distance < @distance)
ORDER BY Distance DESC
如果@distance
为空,则会返回 messages
的所有行,否则只会选择s.Distance < @distance
行。