将表划分为包含表数据的块,以便在 SQL Server 中处理它们



我希望你们能帮助我,或者至少为我指出正确的方向。我有一个表示多边形边界的 SQL Server 表。在简化版本中大致如下所示:

=====================================================
Route id     |   pointId    |      Lat      |   Lon
=====================================================
1       |      1       |  19.12873     | -100.01221
1       |      2       |  19.65468     | -100.01221
1       |      3       |  19.65465     | -100.01221
1       |      1       |  19.65468     | -100.01221
1       |      2       |  19.35468     | -100.01221
1       |      3       |  19.68798     | -100.01221
1       |      4       |  19.98785     | -100.01221
2       |      1       |  19.12873     | -100.01221
2       |      2       |  19.12873     | -100.01221
2       |      3       |  19.12873     | -100.01221

如您所见,有些路线包含两个多边形,了解它的方法是查看 pointId 字段的连续数字。如果 id 重置为 1,但路径相同,则您拥有的是包含两个多边形的路径。我的 SQL 脚本的最终目标是处理每条路线和每个多边形,以确定点是否位于其中任何一个内。

我所做的如下:

  1. 有一个游标,该游标带来所有不同的路由 ID
  2. 处理每条
  3. 线以过滤并获取每条路线的坐标

现在,我需要在连续编号之后将每个查询分成单独的主干。如何避免使用另一个游标并计算每行以检测数字的变化?是否有一种查询或指令来完成此操作?

分离后,我可以将每个多边形解析为几何对象,并检查点是否在多边形的边界内。

如果我正确遵循您的问题,您可以做这样的事情。它会对连续值进行递增row_number。只要它们递增 1,并且row_number也递增,下一行将出现在该"组"中

select 
Grp = PointId - row_number() over (partition by route_id order by pointid),
route_id,
pointid,
lat,
lon
from yourTable

最新更新