En ce qui concerne vos "modifications", il est rare que vous voyiez une question qui inclut "veuillez ne pas fournir...". Assurément, chaque petit geste compte ? D'autant plus que vous ne nous avez pas montré ce que vous faites connaître STContains
ou STIntersects
(ou Filter()
d'ailleurs)...
Quoi qu'il en soit, j'avais une base de données de codes postaux et d'emplacements de magasins à portée de main, j'ai donc renommé les tables/colonnes pour qu'elles correspondent aux vôtres (j'ai alors 6 535 CrimeLocatoins et 3 285 GeoShapes). Je suppose que vous l'avez compris maintenant - mais quelqu'un d'autre pourrait trouver cela utile...
La requête suivante renvoie le nombre de CrimeLocations dans chaque 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
Cela prend des heures (comme 20 minutes) parce que je n'ai pas configuré d'index géospatiaux et que mes ShapeFiles ont un nombre de points élevé, mais cela fonctionne avec succès. Si je voulais restreindre les résultats comme vous le suggérez :
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
Bien sûr, vous ne voulez pas coder en dur le nombre 500 - vous pouvez donc ajouter un COUNT(*) FROM CrimeLocations
sous-requête ici, ou une variable avec le total d'une requête distincte.
Est-ce assez complexe ?