По отношение на вашите „редакции“, не се случва често да виждате въпрос, който включва „моля, не предоставяйте...“. Със сигурност всяко малко помага? Особено след като всъщност не сте ни показали какво правите знаете за STContains
или STIntersects
(или Filter()
по този въпрос)...
Както и да е, имах удобна база данни с пощенски кодове и местоположения на магазини, така че преименувах таблиците/колоните, за да съответстват на вашите (след това имам 6535 CrimeLocatoins и 3285 GeoShapes). Предполагам, че сте го разбрали досега - но някой друг може да намери това за полезно...
Следната заявка връща броя на CrimeLocations във всеки GeoShapes.ShapeFile
SELECT G.Name, COUNT(CL.Id)
FROM GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
ORDER BY 2 DESC
Отнема векове (примерно 20 минути), защото не съм настроил никакви геопространствени индекси и моите ShapeFiles имат висок брой точки, но работи успешно. Ако исках да огранича резултатите, както предлагате:
SELECT G.Name, COUNT(CL.Id)
FROM GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
HAVING COUNT(CL.Id) = 500
Разбира се, не искате да кодирате твърдо числото 500 - така че можете да добавите COUNT(*) FROM CrimeLocations
подзаявка там или променлива с общата сума от отделна заявка.
Това достатъчно сложно ли е?