3

我有一张表,其中有一组带有开始标签和结束标签的路线。每行都有一个列“progres”,它是应用全局“order by”子句的列,最后是一个选择列,告诉哪些标签类型必须排序(奇数、偶数或全部)。if LabelStart > LabelEnd => 按 ASC 排序,否则按 DESC

例如这里是路线路径

路线
ID RouteID、Progres、LabelStart、LabelEnd 类型
1 1 5 1 21 ○
2 1 10 10 2 E
4 2 15 2 25 安
5 3 20 1 11 ○
6 3 22 4 10 E
7 4 30 5 11 ○
8 4 31 2 12

这里是属于路线的点

积分
PoinID 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 回答