在create / insert上添加一个序列号 - Teradata

时间:2009-04-21 12:07:07

标签: sql teradata row-number

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

3 个答案:

答案 0 :(得分: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 ;

答案 1 :(得分: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。

答案 2 :(得分: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 ;