Oracle11g的
我希望rownum按顺序出现(从最小到最大),而不管列的排序顺序如何。我可以通过子查询发送查询来实现此目的,如查询。
所示问题:还有其他方法可以让rownum排序独立于'顺序的'子句吗?
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)
如果我不进行子选择,那么我的rownum就像这样的colum排序:
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.
答案 0 :(得分:1)
使用内联视图有什么缺点?
您始终可以使用row_number
分析函数而不是rownum
伪列。但这需要您将ORDER BY
放在两个不同的地方
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
只要您的分析函数ORDER BY
与外部查询中的ORDER BY
匹配
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