【问题标题】:Add a sequential number on create / insert - Teradata在创建/插入时添加序列号 - Teradata
【发布时间】:2010-10-20 19:27:42
【问题描述】:

在 oracle 中,我们将在创建此表时在 select 上使用 rownum。现在在 teradata 中,我似乎无法让它工作。除非我一起使用 3 列,否则没有可以排序的列并具有唯一值(大量重复)。

旧的方式是这样的,

create table temp1 as 
  select
    rownum as insert_num,
    col1,
    col2,
    col3
  from tables a join b on a.id=b.id
;

【问题讨论】:

  • google 说如果您的表不是很大,应该使用 CSUM(1,1) 而不是 rownum...

标签: sql teradata row-number


【解决方案1】:

你可以这样做:

create table temp1 as 
( 
   select
      sum(1) over( rows unbounded preceding ) insert_num
     ,col1
     ,col2
     ,col3
   from a join b on a.id=b.id
) with data ;

【讨论】:

    【解决方案2】:

    从 V2R6.x 开始,Teradata 在其表上就有了标识列的概念。这些列与 Oracle 的序列概念的不同之处在于分配的数字不保证是连续的。 Teradata 中的标识列仅用于保证行唯一性。

    例子:

    CREATE MULTISET TABLE MyTable
      (
       ColA INTEGER GENERATED BY DEFAULT AS IDENTITY
           (START WITH 1
            INCREMENT BY 20)
       ColB VARCHAR(20) NOT NULL
      )
    UNIQUE PRIMARY INDEX pidx (ColA);
    

    当然,ColA 可能不是用于数据访问或与数据模型中的其他表连接的最佳主索引。它只是表明您可以将其用作桌面上的 PI。

    【讨论】:

    • Rob,如何使用 INSERT INTO 加载 MyTable?
    • 更新,意识到这个问题,我错过了前面的逗号。因此,对于那些遇到同样问题的人,假设您生成的列是第 1 列,您将使用 INSERT INTO <table name> VALUES(,?,?,<add enough ?'s for your case>);
    【解决方案3】:

    这也有效:

    create table temp1 as 
    ( 
       select
       ROW_NUMBER() over( ORDER BY col1 ) insert_num
       ,col1
       ,col2
       ,col3
       from a join b on a.id=b.id
    ) with data ;
    

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 2019-09-25
      • 2019-03-25
      • 2013-03-09
      • 1970-01-01
      • 2013-11-23
      • 2022-01-01
      • 2015-10-07
      • 2018-03-30
      相关资源
      最近更新 更多