Just for 'learning purposes' ;) :
SQL> -- taking horizontal output literally
SQL> -- 1, 10, 2, 9, 3, 8, 4, 7, 5, 6
SQL> --
SQL> select substr(results, 1, length(results)/2) results
2 from ( select listagg(str, ',') within group (order by (up)) results
3 from ( select up
4 , up||','||down str
5 from (select level col from dual connect by level <= 10) t
6 model
7 dimension by (col
8 )
9 measures ( row_number() over (order by col) up
10 , row_number() over (order by col desc) down
11 )
12 rules ()
13 )
14 );
RESULTS
------------------------------------------------------------------------------------
1,10,2,9,3,8,4,7,5,6
1 row selected.
SQL> -- taking horizontal output literally + one extra row
SQL> -- 1, 11, 2, 10, 3, 9, 4, 8, 5, 7, 6
SQL> --
SQL> select substr(results, 1, length(results)/2) results
2 from ( select listagg(str, ',') within group (order by (up)) results
3 from ( select up
4 , up||','||down str
5 , recs
6 from (select level col from dual connect by level <= 11) t
7 model
8 dimension by (col
9 )
10 measures ( row_number() over (order by col) up
11 , row_number() over (order by col desc) down
12 , count(*) over () recs
13 )
14 rules ()
15 )
16 );
RESULTS
------------------------------------------------------------------------------------
1,11,2,10,3,9,4,8,5,7,6
1 row selected.
[confession-mode]
Yeah, it can probably be achieved through the RULES part of the MODEL clause, but didn't succeed (yet)...
Oh well, a fun question anyway!
[/confession-mode]