具有序列号的列


create table Account(A_number number, B_number number, C_number, A_number_mask number as 
GENERATED ALWAYS AS IDENTITY, B_number_mask number, C_number_mask )  

插入后,表值为

A_number B_number  C_number A_mask_number B_mask C_mask
10        100      200      1             NULL   NULL
20        100      200      2             NULL   NULL
30        101      201      3             NULL   NULL
40        102      202      4             NULL   NULL
50        103      203      5             NULL   NULL
60        101      201      6             NULL   NULL

现在我必须填充

  • B_number_mask B_number
  • C号C_number_mask

当我屏蔽或创建序列时,新列也应该具有父列中重复值的重复值。

输出应如下所示:

A_number B_number  C_number A_mask_number B_mask C_mask
10        100      200      1             1      1000
20        100      200      2             1      1000
30        101      201      3             2      2000 
40        102      202      4             3      3000
50        103      203      5             4      4000    
60        101      201      6             2      2000

我必须将排序列提供给用户而不是父列。请随意使用序列的任何起始编号。

使用 ROW_NUMBER 创建序列。

SELECT A_number,
       B_number,
       ROW_NUMBER() OVER(ORDER BY RAND()) as A_number_mask, 
       ROW_NUMBER() OVER(PARTITION BY B_number ORDER BY RAND()) as B_number_mask
FROM Account

您可以在插入数据时使用标识列自动生成唯一编号

create table Account_New(A_number number,
                         B_number number,
                         A_number_mask BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH -1, INCREMENT BY -1)
                         B_number_mask BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 7000000000, INCREMENT BY 1)
)  

只有两个选项来显示可能性 - 一个是生成负数,另一个是使用您未使用的序列。

最新更新