带序列号的列

时间:2018-03-07 14:23:06

标签: sql duplicates db2 unique sequence

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的B_number_mask
  • C_number_mask for C-number

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

输出应该是:

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

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

2 个答案:

答案 0 :(得分:0)

使用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

答案 1 :(得分:-1)

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

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)
)  

显示可能性的两个选项 - 一个是产生负数而另一个是使用未使用的系列。