Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Problem kwerendy SQL 2008 - który LatLong istnieje w wieloboku geograficznym?

Jeśli chodzi o Twoje „edycje”, rzadko pojawia się pytanie zawierające „proszę nie podawać...”. Na pewno wszystko pomaga? Zwłaszcza, że ​​tak naprawdę nie pokazałeś nam, co robisz wiedzieć o STContains lub STIntersects (lub Filter() o to chodzi)...

W każdym razie miałem pod ręką bazę kodów pocztowych i lokalizacji sklepów, więc zmieniłem nazwy tabel/kolumn, aby pasowały do ​​Twojej (wtedy mam 6535 CrimeLocatoin i 3285 GeoShapes). Przypuszczam, że już to zrozumiałeś - ale ktoś inny może uznać to za przydatne...

Następujące zapytanie zwraca liczbę miejsc przestępczości w każdym 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

To trwa wieki (np. 20 minut), ponieważ nie skonfigurowałem żadnych indeksów geoprzestrzennych, a moje pliki ShapeFiles mają dużą liczbę punktów, ale działają pomyślnie. Jeśli chcę ograniczyć wyniki, jak sugerujesz:

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

Oczywiście nie chcesz zakodować na stałe liczby 500 - więc możesz dodać COUNT(*) FROM CrimeLocations tam podzapytanie lub zmienna z sumą z oddzielnego zapytania.

Czy to wystarczająco skomplikowane?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przechowywanie HTML w SQL Server

  2. TDS Server — używaj instrukcji Transact-SQL (T-SQL) do pracy z danymi Salesforce w SQL Server

  3. Gdzie wyzwalacz serwera zapisuje w programie SQL Server?

  4. Wyróżnij jedną kolumnę w dwóch tabelach MS SQL Server 2008

  5. Nie można przejść do procedury składowanej na zdalnym serwerze SQL Server 2008