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

Langage SQL Discussion :

SGBD oracle + union et Except


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut SGBD oracle + union et Except
    Bonjour,

    J'ai 4 tables (TBL1 à 4)

    Pour les tables (TBL1 à 3), j'ai les colonnes suivantes :
    a, b, c, d + une colonne e crée via un CASE.
    le nom de cette colonne est identique pour les 3 tables, seule la valeur de la modalité est différente.

    Pour la table TBL4, j'ai les colonnes suivantes :
    a, b, d + une colonne e crée via un CASE. (j'ai donc la colonne C en moins)
    le nom de cette colonne est identique à la même colonnes des 3 autres tables, seule la valeur de la modalité est différente.

    J'aimerais pouvoir assembler les 4 tables comme suit :

    UNION des tables 1 à 3 + colonne de la table 4 hors doublons (basé sur le couple colonnes A ET B.) ne se trouvant pas déjà dans l'UNION des 3 premières.


    Pour plus de précision :
    A est l'ID d'un dossier
    B est une date d'étude
    C est une date de décision
    D un champ métier commun à toute les tables.

    TBL1 est une table des acceptations
    TBL2 est une tables des refus
    TBL3 est une tables des annulations
    TBL4 est une tables des études en cours ET de l'historique EVENTUEL des états transitoires d'un ID dossier AVANT qu'il ai une décision finale (et bascule dans les tables TBL1 à 3)

    Le but final est d'avoir une table globale, donnant une vision exhaustive de tous les ID dossiers (ceux ayant eu une décision finale + ceux en cours ne l'ayant pas encore eu)
    Le critère sur la table 4 hors doublons est là parce qu'il peut y avoir réutilisation d'un ID dossier non finalisé (n'apparaissant pas dans les tables TBL1 à 3) pour une autre étude (donc en ce cas, on peut avoir un ID identique sur colonne A mais avec une colonne B (date étude) différente).

    J'ai d'abord fait un UNION sur les tables 1 à 3 :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    select *
    from
    (
    (select a,
            b,
            c,
            d,
            CASE
            WHEN a not is NULL
            THEN 'ACP'
            END
            e
     FROM TBL1
     WHERE CONDITIONS
     )
     UNION
     (select a,
            b,
            c,
            d,
            CASE
            WHEN a not is NULL
            THEN 'RFU'
            END
            e
     FROM TBL1
     WHERE CONDITIONS
     )
     UNION
     (select a,
            b,
            c,
            d,
            CASE
            WHEN a not is NULL
            THEN 'ANU'
            END
            e
     FROM TBL1
     WHERE CONDITIONS)
     )
    mais pour rajouter à cet ensemble uniquement les lignes de la table 4 n'y existant pas déjà selon les critères notés, je peine un peu.
    De plus, il me faudrait faire ça en 1 seule étape globale (je dois exécuter ça sous SQL Developper sans possibilité de créer des tables temporaires).

    Je pensais utiliser l'instruction EXCEPT, mais je n'y arrive pas.

    Avez-vous des pistes pour m'aider ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Le critère sur la table 4 hors doublons est là parce qu'il peut y avoir réutilisation d'un ID dossier non finalisé
    Et vous n'avez jamais eu de problème avec ce mode de fonctionnement ?


    Utilisez des union all à la place des union (vu que la fonctionnalité de union ne vous interesse pas ici).

    Pour la dernière table il va falloir dégager tous les couples qui ne vous intéressent pasutilisez plusieurs NOT EXISTS.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Et vous n'avez jamais eu de problème avec ce mode de fonctionnement ?
    Oui et non. en fait ces études non finalisés ne sont gardées qu'à but d'études/stats. Le numéro initial est ré-utilisé pour "économie" de nos plages d'affectations d'ID
    Maintenant, en effet, il faut avoir la connaissance métier de cette particularité pour éviter certains désagréments...

Discussions similaires

  1. déférence entre SGBD oracle et mysql
    Par awax dans le forum Oracle
    Réponses: 1
    Dernier message: 14/04/2006, 01h40
  2. Connexions JDBC vers sgbd Oracle
    Par Reflex77 dans le forum JDBC
    Réponses: 7
    Dernier message: 14/12/2005, 17h02
  3. Requete imbriqué sous delphi avec SGBD oracle accepté ?
    Par EssaiEncore dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/09/2005, 10h55
  4. [sgbd] [Oracle] Pb d'execution d'une requete
    Par linou dans le forum SGBD
    Réponses: 5
    Dernier message: 15/03/2005, 18h01
  5. Connexion SGBD Oracle-SQL langage C/C++
    Par K2004 dans le forum Interfaces de programmation
    Réponses: 4
    Dernier message: 10/02/2004, 20h01

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