Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Проблем със заявката за Sql 2008 - кой LatLong съществува в географски многоъгълник?

По отношение на вашите „редакции“, не се случва често да виждате въпрос, който включва „моля, не предоставяйте...“. Със сигурност всяко малко помага? Особено след като всъщност не сте ни показали какво правите знаете за STContains или STIntersects (или Filter() по този въпрос)...

Както и да е, имах удобна база данни с пощенски кодове и местоположения на магазини, така че преименувах таблиците/колоните, за да съответстват на вашите (след това имам 6535 CrimeLocatoins и 3285 GeoShapes). Предполагам, че сте го разбрали досега - но някой друг може да намери това за полезно...

Следната заявка връща броя на CrimeLocations във всеки 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

Отнема векове (примерно 20 минути), защото не съм настроил никакви геопространствени индекси и моите ShapeFiles имат висок брой точки, но работи успешно. Ако исках да огранича резултатите, както предлагате:

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

Разбира се, не искате да кодирате твърдо числото 500 - така че можете да добавите COUNT(*) FROM CrimeLocations подзаявка там или променлива с общата сума от отделна заявка.

Това достатъчно сложно ли е?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Условен оператор WHERE SQL Server

  2. MSSQL Редовен израз

  3. SQL Server 2008:Имам 1000 таблици, трябва да знам кои таблици имат данни

  4. SQL Server, използващ заместващ знак в IN

  5. Как работи IIF() в SQL Server