在X Miles SQL中计算点数

时间:2018-07-19 14:52:24

标签: sql

我有一个SQL表,其中的列store#,纬度和经度包含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

1 个答案:

答案 0 :(得分:1)

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