Pokud jde o vaše „úpravy“, nestává se často, že byste viděli otázku obsahující „neposkytujte prosím...“. Určitě pomůže každá maličkost? Zejména proto, že jste nám ve skutečnosti neukázali, co děláte vědět o STContains
nebo STIntersects
(nebo Filter()
na to přijde)...
Každopádně jsem měl po ruce databázi PSČ a umístění obchodů, takže jsem tabulky/sloupce přejmenoval tak, aby odpovídaly vašim (mám pak 6 535 CrimeLocatoins a 3 285 GeoShapes). Předpokládám, že už jste na to přišli – ale někomu to může být užitečné...
Následující dotaz vrátí počet CrimeLocations v každém 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
Trvá to věky (asi 20 minut), protože jsem nenastavil žádné geoprostorové indexy a moje soubory ShapeFiles mají vysoký počet bodů, ale běží úspěšně. Pokud bych chtěl omezit výsledky, jak navrhujete:
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
Samozřejmě nechcete napevno kódovat číslo 500 – takže můžete přidat COUNT(*) FROM CrimeLocations
poddotaz nebo proměnná s celkovým počtem ze samostatného dotazu.
Je to dostatečně složité?