Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL 2008-Abfrageproblem - welche LatLongs gibt es in einem geografischen Polygon?

In Bezug auf Ihre „Bearbeitungen“ sehen Sie nicht oft eine Frage, die „bitte nicht angeben …“ enthält. Sicherlich hilft jedes bisschen? Zumal Sie uns noch nicht gezeigt haben, was Sie tun über STContains Bescheid wissen oder STIntersects (oder Filter() übrigens)...

Wie auch immer, ich hatte eine Datenbank mit Postleitzahlen und Geschäftsstandorten zur Hand, also habe ich die Tabellen/Spalten umbenannt, damit sie mit Ihren übereinstimmen (ich habe dann 6.535 CrimeLocatoins und 3.285 GeoShapes). Ich nehme an, Sie haben es inzwischen herausgefunden - aber jemand anderes könnte es nützlich finden ...

Die folgende Abfrage gibt die Anzahl der CrimeLocations zurück in jedem 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

Es dauert Alter (wie 20 Minuten), weil ich keine Geodaten-Indizes eingerichtet habe und meine ShapeFiles eine hohe Punktzahl haben, aber es läuft erfolgreich. Wenn ich die Ergebnisse einschränken wollte, wie Sie vorschlagen:

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

Natürlich möchten Sie die Zahl 500 nicht fest codieren - Sie könnten also einen COUNT(*) FROM CrimeLocations hinzufügen Unterabfrage dort, oder eine Variable mit der Summe aus einer separaten Abfrage.

Ist das komplex genug?