1

我正在使用 Oracle Database Integrator (ODI) 为新表创建接口。

我要做的是为另一列中每个重复出现的值逐渐增加一个数字。例如,对于表:

Person_ID  | ...
32         | ...
45         | ...
32         | ...
67         | ...
45         | ...
45         | ...

该接口将在目标表中输出以下内容:

Person_ID | Sequence_Number | ...  
32        |       1         | ...
45        |       1         | ...
32        |       2         | ...
67        |       1         | ...
45        |       2         | ...
45        |       3         | ...

我试图通过在 Mapping Properties 中的 Implementation 文本编辑器中输入各种 SQL 查询来做到这一点,但似乎我实际上无法让它逐渐增加。

任何帮助将不胜感激!

4

1 回答 1

3

您可以使用row_number(), 或rank()over(partition by personId order by personId)

select personId,
       row_number() over(partition by personId order by personId) Sequence_Number
from your_table

编辑:如果您希望结果的排序与您提到的所需输出完全相同,则需要执行order by rownum两次以保证所需的排序:

select personId,
       row_number() over(partition by personId order by rownum) Sequence_Number
from your_table
order by rownum

以下是对上述查询的检查:


SQL> create table your_table (personId int);

Table created.

SQL> insert all
  2      into your_table values(32)
  3      into your_table values(45)
  4      into your_table values(32)
  5      into your_table values(67)
  6      into your_table values(45)
  7      into your_table values(45)
  8      select * from dual;

6 rows created.

SQL> commit;

Commit complete.

SQL> select personId,
  2         row_number() over(partition by personId order by rownum) Sequence_Number
  3  from your_table;

  PERSONID SEQUENCE_NUMBER
---------- ---------------
        32               1
        32               2
        45               1
        45               2
        45               3
        67               1

6 rows selected.

SQL> select personId,
  2         row_number() over(partition by personId order by rownum) Sequence_Number
  3  from your_table
  4  order by rownum;

  PERSONID SEQUENCE_NUMBER
---------- ---------------
        32               1
        45               1
        32               2
        67               1
        45               2
        45               3

6 rows selected.

SQL> drop table your_table;

Table dropped.

SQL>
于 2015-04-15T01:30:26.527 回答