网站建设法律网页游戏网站哪个最好
Oracle按照某一字段值排序并显示,相同的显示序号
最近的工作遇到对于相同的字段,按照序号去显示值,并对相同的值进行排序
实验了半天,感觉满意的答案,分享给大家
第一种: ROW_NUMBER
 
语法:
ROW_NUMBER() OVER (ORDER BY your_column) AS sequence_number说明: 根据
your_column字段的值进行排序,并为每个唯一的your_column值分配一个序号。
示例:
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) AS sequence_number说明: 根据
your_column字段的值进行排序,并为每个唯一的your_column值分配一个序号。
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
 
语法:
DENSE_RANK() OVER (ORDER BY your_column) AS sequence_number说明: 对有相同
your_column值的行进行分组,并且为每组分配一个序号
示例:
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
 
语法:
RANK() OVER (ORDER BY your_column) AS sequence_number说明: 根据
your_column字段的值进行排序,并为每个唯一的your_column值分配一个序号。
示例:
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') ;
 
效果图:

