3

開始ラベルと終了ラベルを持つ一連のルートがあるテーブルがあります。各行には、グローバルな "order by" 句を適用する列である "progres" 列があり、最後に、順序付けする必要があるラベルの種類 (奇数、偶数、またはすべて) を示す選択列があります。LabelStart > LabelEnd => ASC 順の場合、それ以外は DESC 順

たとえば、ここにルートパスがあります

ルート
ID RouteID、Progres、LabelStart、LabelEnd タイプ
1 1 5 1 21 ○
2 1 10 10 2 エ
4 2 15 2 25A
5 3 20 1 11 ○
6 3 22 4 10 イー
7 4 30 5 11 ○
8 4 31 2 12 エ

ここでは、ルートに属するポイント

ポイント
PointID RouteID、ラベル
1 1 3           
2 1 2
4 1 1
5 1 8
6 1 5
7 1 6
8 1 9
9 1 21
10 1 10
11 1 11
12 2 1
13 2 2
14 2 12
15 2 3
16 2 25
17 2 14
...  

私が必要としているのは、すべてのポイントが Routes Proges によってグローバルに並べ替えられ、タイプに基づいて偶数、奇数、またはすべてでグループ化され、最終的に LabelStart > LabelEnd の場合は DESC によって ASC によって並べ替えられるテーブルです。結果は次のようになります。

ID RouteID、PointID
1 1 4           
2 1 1
4 1 6
5 1 8
6 1 11
7 1 9
8 1 10
9 1 5
10 1 7
11 1 2
12 2 13
13 2 15
...

4

1 に答える 1

9

SQL フィドル

select 
    row_number() over() id, *
from (
    select
        r.routeid,
        p.pointid,
        label,
        type,
        labelstart,
        labelend
    from
        route r
        inner join
        point p on p.routeid = r.routeid
    where
        r.type = 'E' and p.label % 2 = 0
        or
        r.type = 'O' and p.label % 2 != 0
        or
        r.type = 'A'
    order by
        r.routeid, r.progres, r.id,
        case labelstart < labelend
            when true then label
            else label * - 1
        end
) s
于 2013-03-12T00:05:07.440 に答える