我正在尝试从数据库Vertica中操作SQL表。
表格的每一行都有一个开始和结束的XY坐标(绘制一个子路径)。在地图中绘制时,每个子路径连接在一起以形成路径(由唯一路径名称表示)。这就是EndX,End Y与每条路线的StartX,StartY相同的原因。
由于地图软件只能读取X&只有Y列,因此我需要将它们分成两列。
为了省略细节(我认为我的解释不够好),我在下面有一个示例说明,表格如何,以及它应该变成什么样。
为可以帮助您执行示例SQL语句的任何人提供了更好的原始数据。提前谢谢!
原始表
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
决赛桌
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
更新:最终输出将用于在Tableau中绘制路径路径〜每条路径由XY定义,并且该行将遵循序列号。
答案 0 :(得分:3)
感谢您的问题似乎提醒为每条路线添加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
)
我没有对结果集进行排序,但是这里棘手的部分是提出查询,希望这能让你满意。
答案 1 :(得分:0)
意识到我的一些序列有断裂,在这种情况下,这个脚本应该更好。我也想到了更简洁
CostEvaluator