QGIS SQLite环境下按道路分组生成递增分段ID的实现问题
报错原因
- 你在同一层
SELECT语句里引用了刚通过窗口函数生成的别名RowNum,SQL的执行逻辑不支持这种同级别名引用,因此识别不到该字段。 - SQLite中
+仅用于算术运算,不能用来拼接字符串,用+拼接会强制将内容转为数字做加法,无法得到你要的字符串拼接结果。
正确实现方案
这个需求完全可以用纯SQLite语法实现,不需要调用Python,正确写法如下:
SELECT fid, RoadMntnc, Location, Segments, Start_Chainage, Location || '.' || ROW_NUMBER() OVER ( PARTITION BY Location ORDER BY Start_Chainage ASC ) AS Segment_ID FROM test_simple_roads
如果你习惯用别名的写法,也可以用子查询嵌套的方式:
SELECT fid, RoadMntnc, Location, Segments, Start_Chainage, Location || '.' || RowNum AS Segment_ID FROM ( SELECT fid, RoadMntnc, Location, Segments, Start_Chainage, ROW_NUMBER() OVER ( PARTITION BY Location ORDER BY Start_Chainage ASC ) AS RowNum FROM test_simple_roads ) AS t
两种写法都可以在QGIS的SQLite查询里正常运行,生成的Segment_ID完全符合要求。
内容的提问来源于stack exchange,提问作者GeorgeC
相关产品推荐
相关产品推荐

