Domanda

In Oracle useremmo rownum sulla selezionate come abbiamo creato questo tavolo. Ora, in Teradata, io non riesco a farlo funzionare. Non c'è una colonna che posso ordinamento e hanno valori unici (un sacco di duplicazione) a meno che io uso 3 colonne insieme.

Il vecchio modo sarebbe qualcosa di simile,

create table temp1 as 
  select
    rownum as insert_num,
    col1,
    col2,
    col3
  from tables a join b on a.id=b.id
;
È stato utile?

Soluzione

In questo modo si può fare:

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 ;

Altri suggerimenti

Teradata ha un concetto di colonne di identità sulle loro tavole che iniziano intorno V2R6.x. Queste colonne differiscono da concetto sequenza di Oracle dal fatto che il numero assegnato non è sempre garantito sequenziale. La colonna di identità in Teradata è utilizzata semplicemente per garantito fila-unicità.

Esempio:

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

Certo, cola, non può essere la migliore indice primario per l'accesso ai dati o si unisce ad altre tabelle nel modello di dati. Dimostra solo che si potrebbero usarlo come PI sul tavolo.

Questo funziona troppo:

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 ;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top