Oracle按照某一字段值排序并显示,相同的显示序号
第一种: ROW_NUMBER
示例:
SELECT ROW_NUMBER() OVER (ORDER BY sub.C_IDEN_RELA) AS sequence_number,sub.* FROM Testtable sub WHERE 1=1 AND sub.C_IDEN_RELA IN ('5132242092203614208','5132412321219125248','5132392474594680832') ;
效果图:
优化改进(日常喜欢用的)
ROW_NUMBER()
:为每一行分配一个连续的整数。OVER (PARTITION BY sub.C_IDEN_RELA ORDER BY sub.C_IDEN_RELA)
:- 这部分定义了窗口框架。
- 它指定了如何对数据进行分区和排序。
PARTITION BY sub.C_IDEN_RELA
:- 这意味着函数将在
sub.C_IDEN_RELA
列的不同值之间重新开始计数。 - 换句话说,对于
sub.C_IDEN_RELA
的每一个不同值,ROW_NUMBER()
都会从1开始重新编号。
- 这意味着函数将在
ORDER BY sub.C_IDEN_RELA
:- 在每个分区内部,行将按照
sub.C_IDEN_RELA
的值进行排序。 - 如果
sub.C_IDEN_RELA
包含重复值,那么这些行将按照它们在表中的出现顺序进行编号。
- 在每个分区内部,行将按照
示例:
SELECT ROW_NUMBER() OVER (PARTITION BY sub.C_IDEN_RELA ORDER BY sub.C_IDEN_RELA) AS sequence_number,sub.* FROM Testtable sub WHERE 1=1 AND sub.C_IDEN_RELA IN ('5132242092203614208','5132412321219125248','5132392474594680832') ;
效果图:
第二种: DENSE_RANK
SELECT DENSE_RANK() OVER (ORDER BY sub.C_IDEN_RELA) AS sequence_number,sub.* FROM Testtable sub WHERE 1=1 AND sub.C_IDEN_RELA IN ('5132242092203614208','5132412321219125248','5132392474594680832') ;
第三种: ROW_NUMBER
SELECT RANK() OVER (ORDER BY sub.C_IDEN_RELA) AS sequence_number,sub.* FROM Testtable sub WHERE 1=1 AND sub.C_IDEN_RELA IN ('5132242092203614208','5132412321219125248','5132392474594680832') ;