Con respecto a sus 'ediciones', no es frecuente que vea una pregunta que incluya "por favor, no proporcione...". ¿Seguro que todo ayuda? Particularmente porque en realidad no nos has mostrado lo que haces saber sobre STContains
o STIntersects
(o Filter()
para el caso)...
De todos modos, tenía a mano una base de datos de códigos postales y ubicaciones de tiendas, así que cambié el nombre de las tablas/columnas para que coincidieran con las suyas (entonces tengo 6535 CrimeLocatoins y 3285 GeoShapes). Supongo que ya lo habrás descubierto, pero alguien más podría encontrarlo útil...
La siguiente consulta devuelve el número de CrimeLocations en cada 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
Lleva años (como 20 minutos) porque no he configurado ningún índice geoespacial y mis ShapeFiles tienen un alto número de puntos, pero se ejecuta correctamente. Si quisiera restringir los resultados como sugieres:
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
Por supuesto, no desea codificar el número 500, por lo que podría agregar un COUNT(*) FROM CrimeLocations
subconsulta allí, o una variable con el total de una consulta separada.
¿Es lo suficientemente complejo?