Oracle11g
I want rownum to appear in order (smallest to largest) regardless of the sort order of the columns. I can achieve this by sending query through a sub-select as shown in this Query.
Question: Is there any other way to keep rownum sort independent of the 'order by' clause?
with alphabet as
( select 'A' as letters from dual union all
select 'B' as letters from dual union all
select 'C' as letters from dual)
select rownum, letters from
(select letters from alphabet
-- order by letters -- I can change the sort order here w/o changing rownum sort order.
order by letters desc)
If I don't do the sub-select, then my rownum sorts as the colum sorts like this:
with alphabet as
( select 'A' as letters from dual union all
select 'B' as letters from dual union all
select 'C' as letters from dual)
select rownum, letters from alphabet
order by letters desc -- sorting here alters the rownum sort.
What is the downside of using an inline view?
You can always use the row_number
analytic function rather than the rownum
pseudocolumn. But that requires that you put your ORDER BY
in two different places
with alphabet as
( select 'A' as letters from dual union all
select 'B' as letters from dual union all
select 'C' as letters from dual)
select row_number() over (order by letters desc) rn,
letters
from alphabet
order by letters desc
That works regardless of the sort order as long as your analytic function ORDER BY
matches the ORDER BY
in the outer query
SQL> ed
Wrote file afiedt.buf
1 with alphabet as
2 ( select 'A' as letters from dual union all
3 select 'B' as letters from dual union all
4 select 'C' as letters from dual)
5 select row_number() over (order by letters desc) rn,
6 letters
7 from alphabet
8* order by letters desc
SQL> /
RN L
---------- -
1 C
2 B
3 A
SQL> ed
Wrote file afiedt.buf
1 with alphabet as
2 ( select 'A' as letters from dual union all
3 select 'B' as letters from dual union all
4 select 'C' as letters from dual)
5 select row_number() over (order by letters asc) rn,
6 letters
7 from alphabet
8* order by letters asc
SQL> /
RN L
---------- -
1 A
2 B
3 C