我有两个表,我将几何存储在。
CREATE TABLE config.region
(
id int identity(1,1) PRIMARY KEY,
polygon GEOMETRY NOT NULL
)
CREATE TABLE config.location
(
id int identity(1,1) PRIMARY KEY,
position GEOMETRY
)
区域表将包含矩形多边形。位置表仅包含点。
我想要做的是选择所有区域和每个多边形内实际有多少个点的COUNT。
我提出了这个查询,它显示了多边形id,位置id以及该位置是否在多边形中。
SELECT
polygon.id as pid,
config.location.id as lid,
polygon,
polygon.STContains(config.location.position) as within
FROM
config.polygon, config.location
如何修改此项以提供计数,而不仅仅是列出它们是否在彼此之间?
答案 0 :(得分:3)
我没有SQL Server 2008所以我现在无法测试它。你可以试试这个:
select r.id, count(*) as qty
from config.region r
join config.location l on r.polygon.STContains(l.position) = 1
group by r.id
所有多边形:
select p.*, isnull(t.qty, 0) as points_within_polygon
from config.region p
left join (
select r.id, count(*) as qty
from config.region r
join config.location l on r.polygon.STContains(l.position) = 1
group by r.id
) t on t.id = p.id
<强>加强>: 以下代码作为subqery也应该正常工作。您可以尝试哪种方式更快。</ p>
select r.id, sum(cast(r.polygon.STContains(l.position) as int)) as qty
from config.region r
cross join config.location l
group by r.id
<强>更新强>:
已添加bit
到int
。