将表与表数据分成块以在SQL Server

时间:2018-03-20 22:21:50

标签: sql sql-server cursor sqlgeography sqlgeometry

我希望你们能帮助我,或者至少指出我正确的方向。我有一个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脚本的最终目标是处理每个路径和每个Polygon以确定一个点是否在其中任何一个内部。

我所做的是以下内容:

  1. 有一个带来所有不同路由ID的游标
  2. 处理每一行以过滤并获取每条路线的坐标
  3. 现在我需要在连续计算后将每个查询分成单独的中继。我该怎么做才能避免使用另一个光标并评估每一行来检测数字的变化?是否有一种查询或指令来实现这一目标?

    一旦分开,我就可以将每个Polygon解析成几何对象,并检查一个点是否在多边形的边界内。

1 个答案:

答案 0 :(得分:0)

如果我正确地按照你的问题,你可以这样做。它使你的conscutive值增加row_number。只要它们增加1,row_number也增加,下一行将出现在“group”中

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