Aggiungere un numero sequenziale a creare / inserire - Teradata
-
12-09-2019 - |
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
;
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 ;