Sql 计算X英里内的点

Sql 计算X英里内的点,sql,Sql,我有一个SQL表,其列store、latitude和longitude包含1000个存储。我希望每个存储的输出都有一行,列为“25英里以内”和“50英里以内” 我知道如何创建两个坐标之间的距离,但我需要遍历表中的每个商店,计算25英里内有多少商店,50英里内有多少商店 以下是我当前用于计算每个存储与单个指定存储的距离的代码: DECLARE @GEO1 GEOGRAPHY, @LAT VARCHAR(10), @LONG FLOAT(30), @STORE VARCHAR(10) SET @S

我有一个SQL表,其列store、latitude和longitude包含1000个存储。我希望每个存储的输出都有一行,列为“25英里以内”和“50英里以内”

我知道如何创建两个坐标之间的距离,但我需要遍历表中的每个商店,计算25英里内有多少商店,50英里内有多少商店

以下是我当前用于计算每个存储与单个指定存储的距离的代码:

DECLARE
@GEO1 GEOGRAPHY,
@LAT VARCHAR(10),
@LONG FLOAT(30),
@STORE VARCHAR(10)

SET @STORE = 1

SET @LAT = (select convert(varchar(10),s.latitude) FROM table s where s.storeNumber = @STORE)
SET @LONG = (select convert(float(30),s.longitude) FROM table s where s.storeNumber = @STORE)

SET @geo1= geography::Point(@LAT, @LONG, 4326)

SELECT s.storeNumber
        , (@geo1.STDistance(geography::Point(ISNULL(s.latitude,0),ISNULL(s.longitude,0), 4326))) as DISTANCE
FROM table s

为什么@LAT和@LONG是不同的数据类型?@LONG有负值,而将其转换为float是使其工作的唯一方法。您使用哪种数据类型?SQL只是一种查询语言,不是特定数据库产品的名称,您的代码是非标准SQL。请为您正在使用的数据库产品添加a否,回答问题不需要这些信息。这不是我想要的。我希望输出为3列1000行。每个门店行都有一个25英里内门店数量的计数,还有一个50英里内门店数量的计数。@RyanStodola查看编辑后的帖子。您不需要填充地理变量。您可以为每一行在线重新计算它。在WHERE子句中应用storeNumber筛选器。
SELECT s.storeNumber
    ,(SELECT COUNT(*) FROM tbl WHERE 
        (
            (geography::Point(s.latitude, s.longitude, 4326))
                .STDistance(geography::Point(ISNULL(tbl.latitude,0),ISNULL(tbl.longitude,0), 4326))
        ) / 1609.344 <= 25
     ) cnt_25
    ,(SELECT COUNT(*) FROM tbl WHERE 
        (
            (geography::Point(s.latitude, s.longitude, 4326))
                .STDistance(geography::Point(ISNULL(tbl.latitude,0),ISNULL(tbl.longitude,0), 4326))
        ) / 1609.344 <= 50
     ) cnt_50
FROM tbl s
WHERE storeNumber = 1