繁体   English   中英

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

[英]Add a sequential number on create / insert - Teradata

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

这是你如何做到的:

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 ;

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。

这也有效:

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 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM