我正在寻找一种方法来标记和重置在表中重复的行上的行号,但只有一行作为比较的基础。在下面的例子中,第一行(顶点ID 1)应该是比较的基础行,直到它找到基于ObjID, Lat, Lon列(顶点ID 4)的匹配。然后下一行(顶点ID 5)是比较的基础,直到下一个匹配(顶点ID 8)。
<表类>
ObjID
VertexID
Lat
经度
读者指出
tbody><<tr>1 1 30.1 -100.1 多边形1 st . 12 30.2 -100.2 13 30.3 -100.2 14 30.1 -100.1 多边形1结束 15 30.4 -100.4 多边形2圣 16 30.5 -100.4 17 30.5 -100.5 18 30.4 -100.4 多边形2结束 表类>
可以通过递归来实现。对于样本数据,我假设VertexID
是唯一的,并且它是一个连续的整数系列。
with poly as (
select ObjID, VertexID, Lat, Lon, polyN=1, flag=0, sObjID=ObjID, sLat=Lat, sLon=Lon
from tbl
where VertexID =1
union all
select t.ObjID, t.VertexID, t.Lat, t.Lon, polyN + flag,
case when t.ObjID = p.sObjID and t.Lat = p.sLat and t.Lon = p.sLon then 1 else 0 end,
case flag when 1 then t.ObjID else sObjID end,
case flag when 1 then t.Lat else sLat end,
case flag when 1 then t.Lon else sLon end
from poly p
join tbl t on t.VertexID = p.VertexID + 1
)
select ObjID, VertexID, Lat, Lon, polyN
from poly