SQL:使用开始和结束XY更改SQL表

时间:2016-08-26 10:24:19

标签: sql vertica

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

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

由于地图软件只能读取X&只有Y列,因此我需要将它们分成两列。

为了省略细节(我认为我的解释不够好),我在下面有一个示例说明,表格如何,以及它应该变成什么样。

enter image description here

为可以帮助您执行示例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定义,并且该行将遵循序列号。

2 个答案:

答案 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