2009-04-21 14 views
3

In oracle würden wir rownum für das select verwenden, wie wir diese Tabelle erstellt haben. Jetzt im Teradata, ich kann es scheinbar nicht zur Arbeit bringen. Es gibt keine Spalte, nach der ich sortieren kann und die eindeutige Werte (viele Duplizierungen) haben, wenn ich nicht 3 Spalten zusammen benutze.Fügen Sie eine fortlaufende Nummer in create/insert hinzu - Teradata

Die alte Art und Weise, wie etwas sein würde,

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

google sagt KSUMME (1,1) anstelle von rownum tun sollten, wenn Sie Ihre Tabellen nicht zu groß sind ... – HerdplattenToni

Antwort

7

Dies ist, wie Sie es tun können:

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 hat ein Konzept der Identität Spalten auf ihren Tischen beginnen um V2R6.x. Diese Spalten unterscheiden sich vom Sequenzkonzept von Oracle dadurch, dass die zugewiesene Nummer nicht garantiert sequenziell ist. Die Identitätsspalte in Teradata wird einfach zur Gewährleistung der Zeileneindeutigkeit verwendet.

Beispiel:

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

Zugegeben, ColA möglicherweise nicht der beste Primärindex für den Datenzugriff oder verbindet sich mit anderen Tabellen im Datenmodell. Es zeigt nur, dass Sie könnte verwenden Sie es als PI auf dem Tisch.

1

Dies funktioniert auch:

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 ; 
Verwandte Themen