Met betrekking tot uw 'bewerkingen' ziet u niet vaak een vraag met de tekst 'geef alstublieft niet op...'. Alle kleine beetjes helpen toch? Vooral omdat je ons niet echt hebt laten zien wat je doet weten over STContains
of STIntersects
(of Filter()
wat dat betreft)...
Hoe dan ook, ik had een database met postcodes en winkellocaties bij de hand, dus hernoemde ik de tabellen/kolommen zodat ze overeenkomen met die van jou (ik heb dan 6.535 CrimeLocatoins en 3.285 GeoShapes). Ik neem aan dat je het inmiddels doorhebt - maar iemand anders kan dit nuttig vinden...
De volgende query retourneert het aantal CrimeLocations in elk 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
Het duurt eeuwen (zoals 20 minuten) omdat ik geen geospatiale indexen heb ingesteld en mijn ShapeFiles een hoog aantal punten hebben, maar het werkt wel met succes. Als ik de resultaten wilde beperken zoals u voorstelt:
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
Natuurlijk wil je het getal 500 niet hardcoderen - dus je zou een COUNT(*) FROM CrimeLocations
kunnen toevoegen subquery daar, of een variabele met het totaal van een aparte query.
Is dat complex genoeg?