Ajouter un numéro séquentiel sur créer / insert - Teradata
-
12-09-2019 - |
Question
Dans oracle nous utiliserions rownum sur la sélection que nous avons créé ce tableau. Maintenant en teradata, je ne peux pas sembler le faire fonctionner. Il n'y a pas une colonne que je peux et tri sur des valeurs uniques (beaucoup de duplication) à moins d'utiliser 3 colonnes ensemble.
L'ancienne serait quelque chose comme,
create table temp1 as
select
rownum as insert_num,
col1,
col2,
col3
from tables a join b on a.id=b.id
;
La solution
Voici comment vous pouvez le faire:
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 ;
Autres conseils
Teradata a un concept de colonnes d'identité sur leurs tables commençant autour V2R6.x. Ces colonnes diffèrent de concept de séquence d'Oracle en ce que le numéro attribué est pas garanti d'être séquentielle. La colonne d'identité dans Teradata est simplement utilisée pour rangée unique garantie.
Exemple:
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);
Certes, ColA peut ne pas être le meilleur indice principal pour l'accès aux données ou joint à d'autres tables dans le modèle de données. Cela montre que vous pourrait l'utiliser comme PI sur la table.
Cela fonctionne aussi:
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 ;