3

在 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
;
4

3 回答 3

7

您可以这样做:

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 ;
于 2009-04-25T00:17:05.053 回答
3

Teradata 从 V2R6.x 开始在其表上具有标识列的概念。这些列与 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。

于 2009-06-10T12:55:31.863 回答
1

这也有效:

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 ;
于 2009-09-15T22:56:43.020 回答