SQL:改变SQL table 开始和结束XY

SQL: Change SQL table with start and end XY

我正在尝试从数据库 Vertica 中操作 SQL table。

table 的每一行都有一个开始和结束的 XY 坐标(绘制子路径)。在地图中绘制时,每个子路径连接在一起形成路径(由唯一的路线名称表示)。这就是为什么每条路线的 EndX、End Y 与 StartX、StartY 相同的原因。

由于映射软件只能读取 X 和 Y 列,因此我需要将它们压缩成两列。

为了省去细节(认为我解释得不够好),我在下面有一个示例图,关于 table 的样子,以及它应该变成什么样子。

在下面提供了更好的原始数据,任何人都可以帮助做一个示例 SQL 语句。提前致谢!

原版Table

RouteName,Sequence,StartX,StartY,EndX,EndY
road a,1,1.2323,23.1231,1.3242,23.54354
road a,2,1.3242,23.5435,1.3342,24.23533
road b,1,1.4312,25.3432,1.4454,25.2322
road b,2,1.4454,25.2322,1.4634,25.3424
road b,3,1.4634,25.3424,1.5213,26.2132

决赛Table

RouteName,Sequence,X,Y
road a,1,1.2323,23.1231
road a,2,1.3242,23.5435
road a,3,1.3342,24.23533
road b,1,1.4312,25.3432
road b,2,1.4454,25.2322
road b,3,1.4634,25.3424
road b,4,1.5213,26.2132

UPDATE:最终输出将用于在Tableau中绘制路线路径~每条路线均由XY定义,并且该线将遵循Sequence number。

感谢您的问题似乎归结为为每条路线添加 n + 1 有序对。然后,一种方法是将每个起点与标识终点的第二个查询简单地 UNION 放在一起。

SELECT RouteName,
       Sequence,
       StartX,
       StartY
FROM yourTable
UNION
(
    SELECT t1.RouteName,
           t1.Sequence + 1,
           t1.EndX,
           t1.EndY
    FROM yourTable t1
    LEFT JOIN yourTable t2
        ON t1.EndX = t2.StartX AND
           t1.EndY = t2.StartY AND
           t1.RouteName = t2.RouteName
    WHERE t2.RouteName IS NULL
)

我没有对结果集进行排序,但这里棘手的部分是提出查询,希望这已经涵盖了您。

意识到我的一些序列有中断,在这种情况下,这个脚本应该可以更好地工作。我也觉得更简洁

select routename,sequence,startx,starty
from table

union all

select routename, max(sequence)+1 as sequence, endx as startx, endy as starty
from table
group by routename

order by routename