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 :

Comparaison de résultat de sous requêtes [11g]


Sujet :

SQL Oracle

  1. #1
    Membre très actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 261
    Par défaut Comparaison de résultat de sous requêtes
    Bonjour,

    Désolé pour le titre qui n'est peut-être pas assez clair mais je ne savais pas comment résumer mon problème.
    Voici le scénario :

    J'ai deux BDD oracle 11g. Je veux prendre dans chacune des deux une concaténation d'un code et d'une date (Les deux requêtes sont faites, les voici) :

    BDD 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select code||phase||activite||'-'||heure as MesCode1
    from tb_code@LIEN1 A, tb_det_code@LIEN1 B, tb_sejour@1 C
    where A.id_sejour = C.id_sejour
    and no_sejour = '213443993'
    and A.id_acte = B.id_acte;
    Voici le résultat obtenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ZBQK00201-04/01/2018 09:35:00
    DEQP00701-04/01/2018 14:50:00
    DEQP00701-04/01/2018 14:50:00
    GLLD01901-04/01/2018 14:50:00
    BDD2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select Y.code || '-'|| Y.date_real as MesCodes2
    from act@LIEN2 Y, pv1_table@LIEN2 Z
    where Z.act_id = '213443993' and Y.visit_id = Z.visit_id and method='CA';
    Voici le résultat obtenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ZBQK00201-04/01/2018 09:35:00
    DEQP00701-04/01/2018 14:50:00
    GLLD01901-04/01/2018 14:50:00
    Comme on peut le voir, nous avons les mêmes codes d'une base à l'autre. Maintenant mon but ici est de trouvé le code en différence/en trop.
    Le minus ici ne fonctionne pas comme le code en trop dans la BDD1 est quand même présent dans la BDD2
    Le left join est peut être mal fait mais ne semble pas correspondre non plus...

    Alors soit la fin de soirée ne me réussi pas du tout et je m'excuse, soit j'ai besoin d'aide

    Merci

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Rajoute un group by, un count(*) dans le select et compare le tout avec un MINUS

    Si tu veux que les enreg présents en trop dans Base1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    WITH RB1 AS (SELECT 'ZBQK00201' code, '04/01/2018 09:35:00' dte FROM dual
    UNION ALL SELECT 'DEQP00701' code, '04/01/2018 14:50:00' dte FROM dual
    UNION ALL SELECT 'DEQP00701' code, '04/01/2018 14:50:00' dte FROM dual
    UNION ALL SELECT 'GLLD01901' code, '04/01/2018 14:50:00' dte FROM dual),
    RB2 AS (SELECT 'ZBQK00201' code, '04/01/2018 09:35:00' dte FROM dual
    UNION ALL SELECT 'DEQP00701' code, '04/01/2018 14:50:00' dte FROM dual
    UNION ALL SELECT 'GLLD01901' code, '04/01/2018 14:50:00' dte FROM dual
    UNION ALL SELECT 'QUERB2' code, '04/01/2018 04:50:00' dte FROM dual)
    SELECT code ||'-'|| dte ||'x'|| COUNT(*) FROM rb1 GROUP BY code, dte
    MINUS
    SELECT code ||'-'|| dte ||'x'|| COUNT(*) FROM rb2 GROUP BY code, dte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CODE||'-'||DTE||'X'||COUNT(*)
    DEQP00701-04/01/2018 14:50:00x2
    Si tu veux toutes les différences :
    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
    WITH RB1 AS (SELECT 'ZBQK00201' code, '04/01/2018 09:35:00' dte FROM dual
    UNION ALL SELECT 'DEQP00701' code, '04/01/2018 14:50:00' dte FROM dual
    UNION ALL SELECT 'DEQP00701' code, '04/01/2018 14:50:00' dte FROM dual
    UNION ALL SELECT 'GLLD01901' code, '04/01/2018 14:50:00' dte FROM dual),
    RB2 AS (SELECT 'ZBQK00201' code, '04/01/2018 09:35:00' dte FROM dual
    UNION ALL SELECT 'DEQP00701' code, '04/01/2018 14:50:00' dte FROM dual
    UNION ALL SELECT 'GLLD01901' code, '04/01/2018 14:50:00' dte FROM dual
    UNION ALL SELECT 'QUERB2' code, '04/01/2018 04:50:00' dte FROM dual)
    (SELECT code ||'-'|| dte ||'x'|| COUNT(*) FROM rb1 GROUP BY code, dte
    MINUS
    SELECT code ||'-'|| dte ||'x'|| COUNT(*) FROM rb2 GROUP BY code, dte
    )
    UNION ALL
    (SELECT code ||'-'|| dte ||'x'|| COUNT(*) FROM rb2 GROUP BY code, dte
    MINUS
    SELECT code ||'-'|| dte ||'x'|| COUNT(*) FROM rb1 GROUP BY code, dte
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CODE||'-'||DTE||'X'||COUNT(*)
    DEQP00701-04/01/2018 14:50:00x2
    DEQP00701-04/01/2018 14:50:00x1
    QUERB2-04/01/2018 04:50:00x1

  3. #3
    Membre très actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 261
    Par défaut
    Merci beaucoup pour votre réponse,

    J'ai testé la première solution, qui convenait le plus dans ce que j'avais autours et cela fonctionne très bien

  4. #4
    Membre très actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 261
    Par défaut
    Désolé de reouvrir le post. Mais un autre problème m'arrive et je ne sais le résoudre.
    Dans le cas où j'ai autant de retour avec la requête, comment puis-je concaténer toutes les lignes en une avec les codes dans la même colonne ?

    Voici la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    WITH RB1 AS (select  code||phase||id as code, heure as dte, no_sejour
    from tb_acte@LIEN1 A, tb_det_acte@LIEN_CORA B, tb_sejour@LIEN1 C
    where A.id_sejour = C.id_sejour 
    and no_sejour = '1'
    and A.id_acte = B.id_acte),
    RB2 AS (select Y.code code, Y.date_real dte, Z.act_id as NoSejour
    from act@LIEN2 Y, pv1_table@LIEN2 Z
    where Z.act_id = '1' and Y.visit_id = Z.visit_id and method='CA')
    SELECT no_sejour, code ||'-'|| dte ||'x'|| COUNT(*) FROM rb1 GROUP BY code, dte, no_sejour
    MINUS
    SELECT NoSejour,code ||'-'|| dte ||'x'|| COUNT(*) FROM rb2 GROUP BY code, dte, NoSejour;
    Je ne trouve pas de solution


    Edit :

    En fait, je n'avais juste pas branché mon cerveau, désolé.

    Pour ceux qui pourraient avoir besoin, j'ai juste encapsulé ma requête et j'ai utilisé la clause listagg dans le select

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

Discussions similaires

  1. [..] Comparaison des résultats de 2 requêtes SQL
    Par cyrus87 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/05/2015, 08h47
  2. Réponses: 3
    Dernier message: 18/08/2014, 17h56
  3. Résultat avec sous requêtes en colonnes
    Par sdelaunay dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/04/2013, 11h30
  4. Comparaison de résultats de requêtes
    Par Nyx de Tours dans le forum Requêtes
    Réponses: 7
    Dernier message: 31/07/2004, 15h49
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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