2017-04-13 3 views
1

Je souhaite créer une nouvelle table avec des colonnes d'une autre table. Seules ces lignes doivent être sélectionnées, où la colonne x a des valeurs uniques. La colonne x doit être constituée des valeurs tronquées de la colonne a.Valeurs uniques d'une colonne dans une table à plusieurs colonnes dans oracle sql

Voici mon code:

create table nodupli as 
    select distinct(regexp_replace(a,'[[:space:]]|[[:punct:]]','')) as x, 
     B, 
     C, 
     D 
    from table1 
order by x; 

Comment puis-je inclure uniquement les lignes avec des valeurs uniques dans la colonne x?

Répondre

1

Vous pouvez joindre cette requête avec un autre qui renvoie uniquement les x uniques valeurs, comme

select x 
from table1 
group by x 
having count(*) = 1 

La requête résultante serait

create table nodupli as 
select regexp_replace(t1.a,'[[:space:]]|[[:punct:]]','') as x, 
     t1.B, 
     t1.C, 
     t1.D 
from table1 t1 
join (
      select regexp_replace(a,'[[:space:]]|[[:punct:]]','') as x 
      from table1 
      group by regexp_replace(a,'[[:space:]]|[[:punct:]]','') 
      having count(*) = 1 
     ) t2 
on  regexp_replace(t1.a,'[[:space:]]|[[:punct:]]','') = t2.x 
order by x; 

Modifier

Le join précédent condition était mauvaise parce que x est un alias donné à la cal colonne culminé dans le select, de sorte qu'il est en quelque sorte au "niveau de présentation". Le nom de colonne actuel est toujours celui d'origine et vous devez l'utiliser dans la condition join. J'ai édité ma requête, qui devrait maintenant être correcte.

+0

Merci. Ne devrait-il pas être «de table1 t1» à l'intérieur des parenthèses de jointure? – yPennylane

+0

Merci, je l'ai édité. Avoir le même alias à la fois dans la requête interne et dans la requête interne peut être déroutant, donc j'ai juste enlevé l'alias de 't1.a' dans le interne, parce que ce n'est pas nécessaire. –

+0

J'ai testé le code avec mes données et obtenir l'erreur '00904. 00000 - "G1". "X": identifiant invalide "' sur la ligne 'sur g1.x = g2.x'. Le format x in in clob Est-ce la raison pour laquelle cela ne fonctionne pas? – yPennylane