由重复值划分的SQL行号



我正在寻找一种方法来标记和重置在表中重复的行上的行号,但只有一行作为比较的基础。在下面的例子中,第一行(顶点ID 1)应该是比较的基础行,直到它找到基于ObjID, Lat, Lon列(顶点ID 4)的匹配。然后下一行(顶点ID 5)是比较的基础,直到下一个匹配(顶点ID 8)。

<表类> ObjID VertexID Lat 经度 读者指出 tbody><<tr>1130.1-100.1多边形1 st .1230.2-100.21330.3-100.21430.1-100.1多边形1结束1530.4-100.4多边形2圣1630.5-100.41730.5-100.51830.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

相关内容

  • 没有找到相关文章

最新更新