現在、郵便番号/郵便番号の半径内にあるすべての製品のリストを返す作業スクリプトがあります。@lookingfor postcode の@milesパラメーター内の市外局番の場所を持つすべての製品を検索し、距離も返します。
PostodeLocationテーブルには、町/都市、郵便番号 (pcd)、北距 (grn) および東距 (gre) のグリッド参照の 4 つの列が含まれています。主キーは郵便番号にあります。
問題は、各町の中心や、各町の外径の郵便番号がわからないことです。スクリプトを適応させて、町の半径内、または町の中心部にあるすべての製品を提供することはできません。
他の誰かがこの要件に遭遇し、解決策を見つけましたか? 実際のコード要件以上のテクニックを探しています。
現在のスクリプト:
declare @lookingfor nvarchar(10) = 'sw1a 1aa'
declare @miles int = 5
DECLARE @UserCoordX bigint
DECLARE @UserCoordY bigint
SELECT @UserCoordX = GRE
, @UserCoordY = GRN
FROM MyCompany.dbo.PostcodeLocations pcls
WHERE pcls.PCD = @lookingfor
select pcls.PCD
, p.ProdName
, sqrt((((pcls.GRE - @UserCoordX) * (pcls.GRE - @UserCoordX)) + ((pcls.GRN - @UserCoordY) * (pcls.GRN - @UserCoordY)))/(160.9334*160.9334)) as Distance
from MyCompany.dbo.pcls_disk pcls
inner join MyCompany.dbo.Loc l on l.Postcode = pcls.pcd
inner join MyCompany.dbo.X_ProdLoc xpl on xpl.LocId = l.LocId
inner join MyCompany.dbo.Prod p on p.ProdId = xpl.ProdId
where p.StatusId = 4 and p.HideFromSearch = 0
and ((pcls.GRE - @UserCoordX) * (pcls.GRE - @UserCoordX)) + ((pcls.GRN - @UserCoordY) * (pcls.GRN - @UserCoordY))
<= cast(@Miles * 160.9334 * @Miles * 160.9334 as bigint)
order by [Distance]