我有一个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
答案 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