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

Requêtes et SQL. Discussion :

[UPDATE] Marier des enregistrements 2 à 2


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club Avatar de helje
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2005
    Messages : 61
    Points : 50
    Points
    50
    Par défaut [UPDATE] Marier des enregistrements 2 à 2
    Bonjour,

    J'ai une table de la forme :

    id |centre |compte |date |debit |credit |code
    1 |591 |1 |02/05/08 |0,00 |100,00 |
    2 |595 |1 |02/05/08 |100,00 |0,00 |
    3 |591 |2 |03/05/08 |200,00 |0,00 |
    4 |592 |5 |04/05/08 |500,00 |0,00 |
    5 |591 |1 |05/05/08 |100,00 |0,00 |
    6 |595 |1 |05/05/08 |0,00 |100,00 |
    7 |593 |5 |06/05/08 |0,00 |500,00 |
    8 |591 |1 |06/05/08 |100,00 |0,00 |
    9 |594 |2 |06/05/08 |0,00 |150,00 |

    Je dois "marier" les écritures 2 à 2 quand elles ont les caractéristiques :
    - même centre
    - même compte
    - même montant, une fois au débit, une fois au crédit
    Donc les écritures numéros :
    1 et 5
    2 et 6

    Les écritures ainsi mariées portent alors le code "A", ce qui donnerait :

    id |centre |compte |date |debit |credit |code
    1 |591 |1 |02/05/08 |0,00 |100,00 |A
    2 |595 |1 |02/05/08 |100,00 |0,00 |A
    3 |591 |2 |03/05/08 |200,00 |0,00 |
    4 |592 |5 |04/05/08 |500,00 |0,00 |
    5 |591 |1 |05/05/08 |100,00 |0,00 |A
    6 |595 |1 |05/05/08 |0,00 |100,00 |A
    7 |593 |5 |06/05/08 |0,00 |500,00 |
    8 |591 |1 |06/05/08 |100,00 |0,00 |
    9 |594 |2 |06/05/08 |0,00 |150,00 |

    Je pense qu'il est impossible de résoudre ça en une seule requête, mais je ne vois pas comment faire.
    Une piste ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    Salut,
    tu peux faire une seule requête, mais imbriquée :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE MaTable SET code = 'A' 
    WHERE id IN ( 
    SELECT T1.id 
    FROM MaTable AS T1 INNER JOIN MaTable AS T2 
    ON T1.Centre=T2.Centre AND T1.Compte=T2.Compte AND T1.debit = T2.credit);

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut jpcheck et helje,

    jpcheck> helje veux faire du lettrage, ta requete est bonne mais elle ne t'a pas tout dit: "A" pour le premier couple, "B" pour le suivant...
    et attention helje c'est un peu simpliste de faire du lettrage avec un débit= un crédit.

    bonne continuation,

  4. #4
    Membre du Club Avatar de helje
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2005
    Messages : 61
    Points : 50
    Points
    50
    Par défaut
    Bonjour

    jpcheck, merci pour cette requête, ça m'a permis d'avancer énormément.
    En fait je l'ai adaptée en ajoutant la clause where T1.debit <> 0 sinon j'avais des résultats incohérents (lignes mises à jour à tort).
    J'ai égalemnt ajouté une deuxième requête pour comparer dans l'autre sens (credit = débit) sinon des lignes étaient oubliées.

    vodiem, effectivement c'est du lettrage d'écritures. Je suis d'accord que c'est un peu léger de lettrer débit = crédit mais c'est ce qui m'est demandé
    En fait, dans un même centre, sur un même compte, on considère que si un débit égale un crédit, ils s'annulent. Les voix de la comptabilité sont impénétrables...

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 20/05/2014, 15h43
  2. Déplacement des enregistrement lors d'un update
    Par rob1son76 dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/09/2011, 09h08
  3. UPDATE avec des variables Delphi ...
    Par Kokito dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/03/2004, 22h35
  4. Réponses: 3
    Dernier message: 29/12/2003, 13h47
  5. Enlever tous les M&Mme des enregistrements
    Par marc olivier dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/07/2003, 12h24

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