2009-04-21 8 views
3

В oracle мы будем использовать rownum на выделенном фрагменте, когда мы создали эту таблицу. Теперь в teradata я не могу заставить его работать. Нет столбца, в котором я могу сортировать и иметь уникальные значения (много дублирования), если я не использую 3 столбца вместе.Добавить последовательный номер в create/insert - Teradata

старый путь будет что-то вроде,

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

Google говорит CSUM (1,1) вместо ROWNUM следует делать, если ваши таблицы не большой ... – HerdplattenToni

ответ

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

Конечно, кола не может быть лучшим первичным индексом для доступа к данным или соединяется с другими таблицами в модели данных. Это просто показывает, что вы может использовать его как PI на столе.

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 ;