oracle中排序分析函数row_number()、rank()、dense_rank() 的区别,与rownum的注意事项

row_number()产生的序号不会重复,即1、2、3...
rank()产生的序号会重复,但是会跳号,出现1、2、2、4...的情况
dense_rank()产生的序号会重复,不会跳号,会出现1、2、2、3的情况

而普通的rownum是一个伪列,与你的order by是没有关系的

SELECT  row_number() over(ORDER BY ac.check_number) rn
,ac.check_number payment_number 
,rownum
  FROM ap_invoice_payments_all aip
      ,ap_checks_all           ac
 WHERE 1 = 1
       AND ac.status_lookup_code <> 'VOIDED'      
       AND aip.check_id = ac.check_id   
       AND aip.invoice_id = 994001
 ORDER BY ac.check_number ASC;

image

你想要用order by + rownum排序的话就加一个子查询

SELECT payment_number
      ,rownum
  FROM (SELECT ac.check_number payment_number
          FROM ap_invoice_payments_all aip
              ,ap_checks_all           ac
         WHERE 1 = 1
               AND ac.status_lookup_code <> 'VOIDED'
               AND aip.check_id = ac.check_id
               AND aip.invoice_id = 994001
         ORDER BY ac.check_number ASC)

image

posted on 2023-12-25 11:34  兔哥DB  阅读(24)  评论(0编辑  收藏  举报

导航