繁体   English   中英

SQL Server空间连接-多边形中的点计数

[英]SQL Server Spatial Join - Counting Points in Polygons

我在Azure SQL中有两层:

  • 边界-多边形层,4326 SRID,称为“ 形状”的几何字段
  • 作业者-点图层,4326 SRID,称为TheShape的几何

两者都有称为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM