2016-08-26 3 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

: 최종 출력 ~ 각 행은 XY 의해 정의 극적 장면에서 라우팅 경로를 그리기 위해 사용되며 라인은 시퀀스 번호를 따릅니다.

+0

시퀀스 번호가 아닌 경우 x와 y 좌표의 시작과 끝 사이에 'UNION'을 사용할 수 있습니다. –

+0

실제로 달성하고자하는 것은 무엇입니까? – Pirate

+0

@TimBiegeleisen AI 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