Oracle Select列具有不同ID的数量(类似于rownum)

时间:2019-05-23 13:26:08

标签: sql oracle

我需要一列,每当id与之前的行不同时,它就会增加。

    id    desc     
    ---------------
    152   abcdedasd
    152   dasdawidh
    152   das ads a
    194   dasdas da
    168   aopwejapw
    168   dasidjasd

收件人:

    num   id    desc     
    ---------------------
    1     152   abcdedasd
    1     152   dasdawidh
    1     152   das ads a
    2     194   dasdas da
    3     168   aopwejapw
    3     168   dasidjasd

我有一个Oracle 11g。通常,我需要使用CASE或DECODE来选择依赖于其他列的列。但是我需要参考上一条。而且rownum在没有条件的每一行上都会增加。

1 个答案:

答案 0 :(得分:4)

使用DENSE_RANK分析函数:

Oracle设置

CREATE TABLE test_data ( id, "desc" ) AS
  SELECT 152, 'abcdedasd' FROM DUAL UNION ALL
  SELECT 152, 'dasdawidh' FROM DUAL UNION ALL
  SELECT 152, 'das ads a' FROM DUAL UNION ALL
  SELECT 194, 'dasdas da' FROM DUAL UNION ALL
  SELECT 168, 'aopwejapw' FROM DUAL UNION ALL
  SELECT 168, 'dasidjasd' FROM DUAL;

查询

SELECT DENSE_RANK() OVER ( ORDER BY id ) AS num,
       t.*
FROM   test_data t

输出

NUM |  ID | desc     
--: | --: | :--------
  1 | 152 | abcdedasd
  1 | 152 | dasdawidh
  1 | 152 | das ads a
  2 | 168 | aopwejapw
  2 | 168 | dasidjasd
  3 | 194 | dasdas da

db <>提琴here