2016-08-26 84 views
1

我試圖從數據庫Vertica中操縱SQL表。SQL:使用開始和結束XY更改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 

UPDATE:最終輸出將被用於在的Tableau繪製〜每個路由通過XY定義的路由路徑,該行將按照序列號。

+0

如果不是序列號,你可以在開始和結束的x和y座標之間做一個'UNION'。 –

+0

你究竟想實現什麼? – Pirate

+0

@TimBiegeleisen假設一個人工智能PK,依然可以使用PK的升序作爲序列順序嗎? – Takarii

回答

0

認識到我的一些序列有中斷,在這種情況下,這個腳本應該更好地工作。更簡潔我以爲

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 
+1

你不應該給出與你原來的問題不符的答案。 –

+0

嗯,它不匹配?結果是完全一樣的:/請原諒我,因爲我的SQL顯然不是很好。 – Jake

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 
) 

我沒有訂購結果集,但棘手的部分在這裏提出了查詢,希望這已經涵蓋了。

+0

哇,感謝的人!欣賞它〜現在需要消化它:) – Jake

+1

好吧,明白了,這是一個巧妙的想法,謝謝! – Jake

相關問題