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

PL/SQL Oracle Discussion :

rapprochement entre deux tables avec indicateurs de differences


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut rapprochement entre deux tables avec indicateurs de differences
    Bonjour

    J aimerai comparer deux tables qui sont quasiment identiques et mettre en place un indicateur qui va me dire si la ligne est manquante 'MISS' ou un des champs est differents 'DIFF'

    voici ma requete:

    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
    SELECT distinct
    	t.NEW_ID,
    	t.ID AS ID_CDTRA,
    	r.ID AS ID_PP,
    	t.PTF_LIB,
      r.lib,
    --	t.DYN,
    	t.GEST_ID,
      r.gest_id,
      t.gest_nom,
      r.gest_nom,
      t.gest_prenom,
      r.gest_prenom,
      t.owner_id,
      r.owner_id,
    	t.OWNER_NOM,
      r.owner_nom,
    	t.OWNER_PRENOM,
      r.owner_prenom,
    	nvl2(t.ID,'DIFF','MISS') as erreur
    FROM RE7_OCD_01_PORTEFEUILLES t
    LEFT JOIN RE7_RSK_01_PORTEFEUILLES r
    ON t.ID = r.ID AND
       t.PTF_LIB = r.LIB --AND
    --  t.DYN = r.DYN AND
    --   t.GEST_ID = r.GEST_ID AND
    --   t.OWNER_NOM = r.OWNER_NOM AND
    --   t.OWNER_PRENOM = r.OWNER_PRENOM
    WHERE  t.id is not null ORDER BY t.ID;
    j ai mis certaine conditions en commentaires parce que sinon ca ne veut pas marcher

    merci de votre aide

    PS: l 'idée serait que touttes les condidtions coincident et que le champ ERREUR affiche soit MISS soit DIFF

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    J ai l'impression que tu prends le probleme a l'envers

    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
    SELECT DISTINCT
    	t.NEW_ID,
    	t.ID AS ID_CDTRA,
    	r.ID AS ID_PP,
    	t.PTF_LIB,
      r.lib,
    	t.GEST_ID,
      r.gest_id,
      t.gest_nom,
      r.gest_nom,
      t.gest_prenom,
      r.gest_prenom,
      t.owner_id,
      r.owner_id,
    	t.OWNER_NOM,
      r.owner_nom,
    	t.OWNER_PRENOM,
      r.owner_prenom,
    	nvl2(t.ID,'DIFF','MISS') AS erreur
    FROM RE7_OCD_01_PORTEFEUILLES t
    Right JOIN Outer RE7_RSK_01_PORTEFEUILLES r
    ON t.ID = r.ID 
    AND t.PTF_LIB = r.LIB 
    AND (t.DYN <> r.DYN 
      Or t.GEST_ID <> r.GEST_ID 
      Or t.OWNER_NOM <> r.OWNER_NOM
      Or t.OWNER_PRENOM <> r.OWNER_PRENOM)
    /* WHERE  t.id IS NOT NULL */
    ORDER BY t.ID;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    Bonjour

    tout d'abord merci pour votre aide mais aprés avoir testée la requête, je remarque lexistence de plusieurs doublons

    Je suis coincé je ne sais pas du tout comment faire

    Need help

  4. #4
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Merci de donner un exemple du contenu des 2 tables et de précisier comment on peut considérer qu'une ligne de chaque table sont à comparer ?
    Est-ce que la condition suivante suffit pour être sûr de travailler sur 2 lignes "jumelles" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.ID = r.ID AND t.PTF_LIB = r.LIB

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    Bonjour

    Table1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       	NEW_ID	ID	PTF_LIB	DYN	GEST_ID	GEST_NOM	GEST_PRENOM	OWNER_ID	OWNER_NOM	OWNER_PRENOM
    	959	1	CRI Groups	YES						
    	423	13	IR - AILN	YES	232526	BOULIN	balou			
    	423	13	IR - AILN	YES	241236	CORAIL	ronald
    Table 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ID	LIB	DYN	GEST_ID	GEST_NOM	GEST_PRENOM	OWNER_ID	OWNER_NOM	OWNER_PRENOM
    1	CRI Groups	no						
    13	IR - AILN	no	232526	BOULIN	balou			
    13	IR - AILN	no	241236	CORAIL	ronald

  6. #6
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Bonjour,

    J ai complété la requete en fonction des données :
    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
    SELECT DISTINCT
    	t.NEW_ID,
    	t.ID AS ID_CDTRA,
    	r.ID AS ID_PP,
    	t.PTF_LIB,
      r.lib,
    	t.GEST_ID,
      r.gest_id,
      t.gest_nom,
      r.gest_nom,
      t.gest_prenom,
      r.gest_prenom,
      t.owner_id,
      r.owner_id,
    	t.OWNER_NOM,
      r.owner_nom,
    	t.OWNER_PRENOM,
      r.owner_prenom,
    	nvl2(t.ID,'DIFF','MISS') AS erreur
    FROM RE7_OCD_01_PORTEFEUILLES t
    Right JOIN Outer RE7_RSK_01_PORTEFEUILLES r
    ON t.ID = r.ID 
    AND t.PTF_LIB = r.LIB 
    And (T.GEST_ID = R.GEST_ID Or (T.GEST_ID Is null or R.GEST_ID Is null))
    AND (t.DYN <> r.DYN 
      Or t.GEST_ID <> r.GEST_ID 
      Or t.OWNER_NOM <> r.OWNER_NOM
      Or t.OWNER_PRENOM <> r.OWNER_PRENOM)
    ORDER BY t.ID;
    Mais pour être sûr que cela fonctionne, il faudrait connaitre la clé primaire de la table d'origine (je suppose que c est RE7_RSK_01_PORTEFEUILLES) et être sûr que pour 1 ligne de cette table on n'en a bien qu'une dans l'autre.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    Merci beaucoup pour votre aide

    Il y a de l amélioration par contre

    j ai des lignes qui concordent parfaitement et il ne les retrouvent pas

    pasque au niveau des champs dyn il y a dans l 'un 'NO' et l autre 'no'
    Pensez vous que ca puisse bloquer le rapprochement

    D autre part comment fait on pour comparer des champ qui sont nul ?

    Merci de votre aide

  8. #8
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    En l'état, la requete ne ramène que les lignes sur lesquelles des différences sont relevées. Donc si les 2 tables sont identiques, la requete ne ramene rien.

    Pour les différences de casse ('NO' <> 'no') si vous ne voulez pas les voir apparaitre, il faut faire les comparaisons sur upper(col1) <> upper(col2)

    Pour les champs null, ils sont systématiquement renvoyé comme différents donc il faut completer les contraintes pour prendre ca en compte :
    t.col1 <> r.col1 --> (t.col1 <> r.col1 And (T.col1 is not null Or r.col1 is not null))

    Je vous laisse adapter la requete suivant vos besoins

Discussions similaires

  1. Jointure entre deux tables avec close WHERE
    Par redoran dans le forum Requêtes
    Réponses: 5
    Dernier message: 31/05/2012, 11h12
  2. Réponses: 4
    Dernier message: 28/01/2010, 21h07
  3. Récuperer différence entre deux tables avec JOIN
    Par Takumi dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/08/2009, 22h59
  4. Réponses: 1
    Dernier message: 11/06/2009, 23h39
  5. rapprochement entre deux tables
    Par nassu dans le forum Access
    Réponses: 14
    Dernier message: 09/04/2006, 09h21

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