IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Créer une vue en supprimant les doublons sur certaines colonnes


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Créer une vue en supprimant les doublons sur certaines colonnes
    Bonjour,

    J'essaye de créer une vue en sql (oracle à partir de la 10.2) et j'espère que vous allez pouvoir m'aider.

    J'ai une table qui a la structure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CLE    COMMUNE     RUE     COL1     COL2         COL3 COL4 COL5 COL6
    1        Com1     Rue1     x          y          z
    2        Com1     Rue1     u          v          w
    3        Com1     Rue2     x          u          z
    4        Com2     Rue1     y          z          z
    5        Com2     Rue2     w          v          x
    6        Com2     Rue2     x          y         z
    7        Com2     Rue3     a          b         c
    Je désire créer une vue de cette table qui comprend les colonnes CLE, COMMUNE, RUE, COL1, COL2, COL3 uniquement.
    Dans cette vue, je désire supprimer les doublon sur les colonnes COMMUNE et RUE, tout en conservant la clé. La valeur de la clé n'a pas d'importance, mais elle doit être là. les COL1, COL2 et COL3 doivent être dans la vue mais le contenu des colonnes n'est pas important (s'il est null c'est encore mieux).

    Le résultat attendu pour cette vue est donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CLE    COMMUNE     RUE     COL1         COL2         COL3
    1        Com1     Rue1     null          null          null
    3        Com1     Rue2     null          null          null
    4        Com2     Rue1     null          null          null
    5        Com2     Rue2     null          null          null
    7        Com2     Rue3     null          null          null
    Pouvez-vous m'aider s'il vous-plaît ? J'ai essayé avec le group by mais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select cle,commune,rue,col1,col2,col3 from table group by commune, rue;
    n'est pas valide pour oracle.

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    En effet, toutes les colonnes qui ne font pas l'objet d'une fonction de regroupement doivent être reprise dans la clause GROUP BY.
    Pour s'en tenir à ce que tu as exprimé comme besoin, tu pourrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  MAX(cle)    cle
        ,   commune
        ,   rue
        ,   NULL        col1
        ,   CAST(NULL AS <type de col2>)    col2
        ,   CASE(WHEN MAX(col3) IS NOT NULL THEN NULL END) col3
    FROM    TABLE 
    GROUP BY commune
        ,   rue
    ;
    En prenant le MAX(cle), tu obtiens bien l'une des valeurs de clé correspondant au couple (rue, commune).
    Pour les colonnes col1 à col3, je t'ai proposé trois options :
    • NULL retourne bien NULL dans une colonne nommée col1, mais de type non défini à l'origine,
    • CAST(NULL ...) retourne aussi NULL mais dans une colonne du type défini dans la requête (à renseigner !),
    • CASE(...) retourne bien NULL dans une colonne du type de la colonne traitée (ici col3).
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup ça marche très bien !

    Juste pour info au cas où d'autres personnes rencontreraient le même problème plus tard, voici ma requête complète pour créer la vue, où j'ai ajouté en plus une condition sur le code postal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Create or replace view MA_VUE AS
    SELECT  MAX(cle)    cle
        ,   code_postal
        ,   commune
        ,   rue
        ,   CAST(NULL AS number(10,0))    col1
        ,   CAST(NULL AS number(10,0))    col2
        ,   CAST(NULL AS date)    col3
        ,   CAST(NULL AS date)    col4
     
    FROM    MA_TABLE
    WHERE code_postal like '4%'
    GROUP BY code_postal
        ,  commune
        ,   rue
     
    ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connaitre les doublons sur 2 colonnes
    Par afrodje dans le forum Requêtes
    Réponses: 7
    Dernier message: 17/02/2009, 09h15
  2. Réponses: 1
    Dernier message: 02/07/2008, 18h49
  3. Gérer les Doublons sur 3 Colonnes
    Par faressam dans le forum Excel
    Réponses: 2
    Dernier message: 03/06/2008, 12h04
  4. Supprimer les Warnings sur certains répertoire
    Par ALX79 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 22/01/2008, 18h49
  5. [Access] supprimer les doublons sur deux champs
    Par nini94 dans le forum Langage SQL
    Réponses: 15
    Dernier message: 13/10/2006, 11h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo