[英]SQL Server Spatial Join - Counting Points in Polygons
我在Azure SQL中有两层:
两者都有称为OBJECTID
主键,并且都有适当的空间索引。
我想要一个优化的查询,该查询将向我显示每个BOUNDARY
(包括边界Shape字段)内的WORKORDERS
总数
SELECT a.*
FROM BOUNDARIES a
INNER JOIN
(SELECT
OBJECTID,
TheShape,
COUNT(*) as total_count
FROM
WORKORDERS
GROUP BY
OBJECTID) b ON a.Shape.STIntersects(b.TheShape) = 1
出现错误:
选择列表中的“ WORKORDERS.TheShape”列无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
有人可以指出我要去哪里了,这是否是实现此目标的最佳方法?
您需要按聚合功能不涉及的所有选定列进行分组,例如:
SELECT a.*
FROM BOUNDARIES a
INNER JOIN
(
SELECT
OBJECTID,
TheShape,
COUNT(*) as total_count
FROM WORKORDERS
GROUP BY OBJECTID, TheShape
) b on a.Shape.STIntersects(b.TheShape) = 1
要么
SELECT a.*
FROM BOUNDARIES a
INNER JOIN
(
SELECT
TheShape,
COUNT(*) as total_count
FROM WORKORDERS
GROUP BY TheShape
) b on a.Shape.STIntersects(b.TheShape) = 1
无论如何,进行聚合的几何限制,您可以通过这种方式获得所需的结果
如果您需要每个BOUNDARIES的WORKORDERS数量
SELECT a.OBJECTID, count(*)
from BOUNDARIES a
INNER JOIN WORKORDERS b on a.Shape.STIntersects(b.TheShape) = 1
GROUP BY a.OBJECTID
如果您也需要胸形
select a.OBEJECTID, a.Shape, t.my_count
from BOUNDARIES a
INNER JOIN
(
SELECT a.OBJECTID, count(*) my_count
FROM BOUNDARIES a
INNER JOIN WORKORDERS b on a.Shape.STIntersects(b.TheShape) = 1
GROUP BY a.OBJECTID
) t on a.OBEJECTID = t.OBEJECTID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.