Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有序列号的列_Sql_Duplicates_Db2_Unique_Sequence - Fatal编程技术网

Sql 具有序列号的列

Sql 具有序列号的列,sql,duplicates,db2,unique,sequence,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 ) 现在我必须填充 B_编号\u用于B_编号的掩码 C_编号\u C编号的掩码 当我屏蔽或创建序列时,新列也应该为父列中的重复值具有重复值 输出应如下所示: A

插入后,表格值为

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 )  
现在我必须填充

  • B_编号\u用于B_编号的掩码
  • C_编号\u C编号的掩码
当我屏蔽或创建序列时,新列也应该为父列中的重复值具有重复值

输出应如下所示:

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
我必须将序列列提供给用户,而不是父列。
请随意使用序列的起始编号。

使用
行编号创建序列

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

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

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

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

向我们展示如何创建第二个表以及如何填充我没有创建第二个表。我想把这个输出放在我的第二张桌子上。为了安全起见,我可以在创建第二个表时使用序列来显示\u编号\u掩码,而不是显示\u编号。但我不知道我应该用什么逻辑来确定B_掩码_编号,因为它有重复项。我需要一个基于B_编号的序列或唯一值,前提是我为重复的B_编号获得了相同的B_编号掩码。请说明您想要实现的目标。现在我不明白逻辑。英语是你的主要语言吗?因为如果你说“我有”的意思是已经完成了,而不是“我想要”或“我需要”meen你需要帮助谢谢你纠正我。英语不是我的主要语言,我正在尽力解释我的要求。对于A_数和B_数,我想创建一个随机唯一数。这样我就不必为了安全目的给公司提供实际价值。我可以使用序列为一个_编号创建唯一编号。但B_数有重复的值,如果我使用序列,我会得到不同的值,相同的B_数值,我不想要。因此,如果有任何其他方法来实现SQL的要求,请指导我。我们下次尝试使用谷歌翻译。我们在其他语言中也有,这可能会有所帮助。但我会再次尝试回答你的问题,因为我的需求需要不同系列的数字。我们的数据有一个10000000002000000000的序列号,以此类推。但它没有5000000000系列。所以在我的序列中,我将使用这个序列来获得唯一的值。同样的,我们没有一个700000000系列的B_编号。我必须使用此系列来获取基于B_编号的唯一编号。请尝试使用行编号。可以尝试此聚合
按兰德排序()
很好,因为它可以帮助您隐藏行之间的关系。但如果表太大,可能会导致性能问题。所以要考虑到这一点。一个表只能有一个用IDENTITY属性定义的列。这里的B_数不是唯一的。应根据B_编号创建B_编号屏蔽,并应给出重复B_编号的重复序列号。例如,如果B_编号为1、2、3、3、4,则B_掩码_编号应为700、701、702、702、702、703。我不想用算术运算。如果有任何其他方法可以实现这一点,请告诉meSorry true-但是您可以定义一个序列,而不是第二个标识列
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)
)