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

DB2 Discussion :

Problème champ identique


Sujet :

DB2

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Problème champ identique
    Bonjour, j'ai actuellement un petit problème.

    J'ai un select comme ceci:

    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
    SELECT                                       
                IDCPTEX1,                                  
                ANNCPTEX1,                                                                 
     CASE WHEN ANNCPTEX1 = 2              
         THEN ABS(GRTEAPB1) * -1            
                           ELSE GRTEAPB1
    END,                                 
     CASE WHEN ANNCPTEX1 = 2              
         THEN ABS(CLTEAPB1) * -1            
                           ELSE CLTEAPB1
    END,                                 
    CASE WHEN ANNCPTEX1 = 2              
     THEN ABS(VLBEAPB1) * -1            
                           ELSE VLBEAPB1
    END
    FROM BDDX1
    JOIN BDDB1 on CPTEB1 = CPTEX1
    Celui-ci m'affiche un
    - ID de compte
    - Un booléan (Si 2 alors rendre montant négatif sinon laisser comme sa)
    - Montant total

    Et j'ai un deuxième select séparé comme sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT  IDCPTEX1,                     
                   VLBEAPB1,                      
                   DTETRDB1,                      
                   ORDPTRB1                                                            
    FROM BDDX1                            
    JOIN BDDB1 on CPTEB1 = CPTEX1            
    ORDER BY DTETRDB1 DESC, ORDPTRB1 DESC
    Celui-ci m'affiche le montant VLBEAPB1 le plus récent par compte.

    Le problème c'est que j'aimerai relié les 2 select en 1 seul... (OU SI AUTRE SOLUTION) pour me permettre de recupéré le montant total(1ier select) ainsi que le plus récent(2iem select)
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  IDCPTEX1,
                 ANNCPTEX1,                     
                   A.VLBEAPB1, (Montant total)                                         
                   B.VLBEAPB1, (dernier montant ajouté)
    Merci pour votre aide que j'apprécie.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Comme je vous le faisais remarquer dans votre autre sujet ici : https://www.developpez.net/forums/d1.../#post10712480
    utiliser un tri pour rechercher l'enregistrement le plus récent est rarement la bonne solution, consultez mon blog pour les solutions possibles.

    Pour répondre à votre nouveau besoin, merci de communiquer la description exacte des deux tables ou à minima, d'ajouter des alias de table dans vos deux requêtes de sorte à ce que l'on puisse savoir quelle colonne provient de quelle table. C'est d'ailleurs fortement recommandé car ça facilite la lecture et donc la maintenance

    Citation Envoyé par Fynezy Voir le message
    Merci pour votre aide que j'apprécie.
    C'est possible, mais en ce cas vous auriez pu manifester votre contentement par des encouragements en utilisant le bouton prévu à cet effet pour les réponses qui ont pu vous aider

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    La table BDDB1 contient: CPTEB1
    IDCPTEB1
    VLBEAPB1,
    DTETRDB1,
    ORDPTRB1,
    GRTEAPB1
    La table BDDX1 contient: CPTEX1
    IDCPTEX1
    ANNCPTEX1

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Et de quelle(s) table(s) viennent les colonnes ANNCPTE et B1VLBEAP ?
    EDIT et B1GRTEAP

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    ANNCPTEX1

    Tous finissent par X1 viennent de la table BDDX1
    Même principe pour B1

    PS: J'ai regarder t'on blog et j'ai également essayé cette facon de faire de récupérer la ligne la plus récente ce qui marche très bien.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    OK pour les colonnes, sauf ANNCPTE qui ne comporte ni B1 ni X1

    Voici une requête non testée (il peut donc y avoir quelques erreurs de syntaxe mais le principe est là). Il faut remplacer les alias (??) manquants
    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
     
    SELECT X1.IDCPTEX1
         , X1.ANNCPTEX1                                                                 
         , CASE WHEN ??.ANNCPTE = 2              
                THEN ABS(B1GRTEAP) * -1            
                ELSE B1.GRTEAPB1
           END                                 
         , CASE WHEN ??.ANNCPTE = 2              
                THEN ABS(??.B1GRTEAP) * -1            
                ELSE B1.GRTEAPB1
           END                                 
         , CASE WHEN ??.ANNCPTE = 2              
                THEN ABS(??.B1VLBEAP) * -1            
                ELSE B1.VLBEAPB1
           END
         , SUB1.COL1  as Dernier_IDCPTEX1                                       
         , SUB1.COL2  as Dernier_VLBEAPB1
         , SUB1.COL3  as Dernier_DTETRDB1  
         , SUB1.COL4  as Dernier_ORDPTRB1    
    FROM BDDX1 X1
    JOIN BDDB1 B1  
      on B1.CPTEB1 = X1.CPTEX1
    join (SELECT IDCPTEX1  COL1                     
               , VLBEAPB1  COL2                  
               , DTETRDB1  COL3
               , ORDPTRB1  COL4
               , CPTEX1    COL5                                                            
          FROM BDDX1                            
          JOIN BDDB1 
           on  CPTEB1 = CPTEX1
          where not exists
               (select 1
                from BDDB1 SUB2
                where SUB2.CPTEX1  =X1.CPTEX1
                  and SUB2.DTETRDB1>X1.DTETRDB1) -- filtre date la plus récente ici !  
     
         ) as SUB1
      on SUB1.COL5=X1.CPTEX1                
    order by B1.ORDPTRB1 desc
    PS : pour info, dans une BDD on parle d'attribut ou de colonne, mais pas de champs

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Merci bien.

    Je fais des tests aujourd'hui et je te re donne des nouvelles.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Une petite boulette dans la requête imbriquée après relecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          where not exists
               (select 1
                from BDDB1 SUB2
                where SUB2.CPTEX1  =X1.CPTEX1
                  and SUB2.DTETRDB1>X1.DTETRDB1) -- filtre date la plus récente ici !
    il faut remplacer SUB2.CPTEX1 par SUB2.CPTEB1 dans le where

    Comme mentionné précédemment, je n'ai pas testé (pas le temps de créer les tables et le contenu) il peut rester quelques coquilles

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    where SUB2.CPTEB1 = X1.CPTEX1

    Le problème c'est qu'il ne trouve pas la variable CPTEX1 a cette ligne... peut être un probleme avec l'alias devant

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    J'avais récupéré CPTEX1 et CPTEB1 de votre première requête, or je vois qu'il existe aussi des colonnes IDCPTEX1 et IDCPTEB1
    Peut être faut il simplement remplacer CPTEX1 par IDCPTEX1 ...

    Il s'agit de vos tables, à vous d'analyser ce genre de détails et d'adapter la requête que j'ai communiquée en corrigeant les noms de colonnes si nécessaire

Discussions similaires

  1. Problème champ après import d'excel vers access
    Par David M dans le forum Access
    Réponses: 6
    Dernier message: 16/10/2005, 11h53
  2. Requete croisant deux champs identiques
    Par sabotage dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/08/2005, 11h59
  3. problème champ date dans base oracle
    Par ludovik dans le forum Oracle
    Réponses: 6
    Dernier message: 25/07/2005, 15h48
  4. Problème champs de type texte.
    Par Le-Cortex dans le forum Access
    Réponses: 7
    Dernier message: 06/01/2005, 14h42
  5. plusieurs champs identiques en ligne
    Par viviking dans le forum Langage SQL
    Réponses: 12
    Dernier message: 18/06/2004, 11h25

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