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
;
Était-ce utile?

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 ;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top