在表中创建新序列

问题描述 投票:0回答:1

我需要根据下面的 SEQNO 列创建新序列,我希望最小 SEQNO 始终以 1 开头。我该怎么做? 我并不是想改变原来的表。 我只是想向我提取的数据添加一个新列,这样我就可以更轻松地与其他表连接。

以下是表中的示例。 “Order”列是我根据 SEQNO 列拉取数据时要创建的列。

ID SEQNO Order
N1    4    1
N1    7    2
N1    11   3
N2    3    1
N2    5    2

我没有尝试任何事情,因为我不知道从哪里开始。

sql oracle
1个回答
0
投票

这是一种方法:使用 row_number 分析函数查找序数(

新序列
值)。然后
merge
将其与“原始”表一起使用。

之前:

SQL> select * from test order by id, seqno;

ID      SEQNO    C_ORDER
-- ---------- ----------
N1          4
N1          7
N1         11
N2          3
N2          5

设置新序列:

SQL> merge into test a
  2  using (select b.id, b.seqno,
  3           row_number() over (partition by b.id order by b.seqno) c_order
  4         from test b
  5        ) x
  6  on (    a.id = x.id
  7      and a.seqno = x.seqno
  8     )
  9  when matched then update set
 10    a.c_order = x.c_order;

5 rows merged.

之后:

SQL> select * from test order by id, seqno;

ID      SEQNO    C_ORDER
-- ---------- ----------
N1          4          1
N1          7          2
N1         11          3
N2          3          1
N2          5          2

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.