代码之家  ›  专栏  ›  技术社区  ›  Sas

带有序列号的列

  •  0
  • Sas  · 技术社区  · 7 年前
    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\U编号的B\U掩码
    • C\u number\u 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 回复  |  直到 7 年前
        1
  •  0
  •   Juan Carlos Oropeza    7 年前

    使用 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
    
        2
  •  -1
  •   MichaelTiefenbacher    7 年前

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

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

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