1

少しの構文を補佐してくれることで、私を助けてくれることを願っています。

これを再フォーマットしようとしています:

id1 id2     pathType   location  
1   1   start   AlgonacPark
2   1   move    DuckLakePark
3   1   move    ClearLakePark
4   1   finish  GrandLakePark
5   2   start   CraigLakePark
6   2   finish  HayesPark

これに:

1   NULL    AlgonacPark
1   AlgonacPark DuckLakePark
1   DuckLakePark    ClearLakePark
1   ClearLakePark   GrandLakePark
1   GrandLakePark   NULL
2   NULL    CraigLakePark
2   CraigLakePark   HayesPark
2   HayesPark   NULL

ロジックは比較的単純です...

(a.) id2 を使用してグループのセットを作成する

グループごとに、

(b.) pathType = start -> (id2, NULL, location) の場合

(c1.) リストの順序付けに「id1」を使用して、場所の順序付きリストを作成します。

(c2.) ループを使用してリストをペアで出力 --> (id2, location1, location2)

例:

2か所: (1,2) --> (1,2)

3箇所: (1,2,3) --> (1,2), (2,3)

4箇所: (1,2,3,4) --> (1,2), (2,3), (3,4)

n 個の場所 (n>1): (1,...,n) --> (1,2), ... , (n-1,n)

(d.) pathType = 終了の場合 -> (id2、場所、NULL)

とても有難い!

4

1 に答える 1

2

次のクエリを試してみてください。正しく動作します。

 WITH TEMP
 AS
 (
 SELECT ROW_NUMBER() OVER(PARTITION BY ID2 ORDER BY ID1) AS ID , *
 FROM LOCATION
 )
 SELECT A.ID1, A.ID2 , B.LOCATION , A.LOCATION 
 FROM TEMP AS A LEFT OUTER JOIN TEMP AS B ON A.ID -1 = B.ID AND A.ID2 = B.ID2
 UNION ALL 
 SELECT A.ID1,A.ID2 , A.LOCATION , NULL
 FROM TEMP AS A 
 WHERE PATHTYPE = 'FINISH'
 ORDER BY ID1

sqlFiddle

于 2013-06-29T19:20:08.023 に答える