Добавить порядковый номер при создании / вставке - Teradata - PullRequest
3 голосов
/ 21 апреля 2009

В oracle мы использовали бы rownum для select, когда создавали эту таблицу. Теперь в 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 ]

7 голосов
/ 25 апреля 2009

Вот как вы можете это сделать:

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 ;
3 голосов
/ 10 июня 2009

У 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 на столе.

1 голос
/ 16 сентября 2009

Это тоже работает:

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