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 :

Comment soustraire 2 champs d'une même table?


Sujet :

Langage SQL

  1. #1
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut Comment soustraire 2 champs d'une même table?
    Bonjour à tous,

    Alors attention .. mon problème n'est pas aussi simple qu'il y parait. Ce problème s'applique à des caisses enregistreuses de supermarché. Je m'explique :

    J'ai une table dont le modèle est le suivant:

    mouvements_monetaires( id_transaction INT, value DECIMAL(10, 2), caractere ENUM('Paiement', 'Change') )

    Cette table contient donc une valeur qui serait le montant du mouvement ainsi qu'un type de mouvement : en cas de paiement, on paye a la caissiere une certaine quantité d'argent, et en cas de change, on rend au client la monnaie de son paiement.

    A NOTER qu'en cas de paiement par carte bleue ou par paiement du montant exact (dans tous les cas n'entrainant pas de change), un tuple de type 'Change' n'est pas renseigné.

    Dans la table je vais donc avoir des entrées comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    | id_transaction | val | caractere |
    ------------------------------------
    |       1        | 30  | 'Paiement'|
    |       1        |  4  | 'Change'  |
    |       2        | 90  | 'Paiement'|
    |       3        | 50  | 'Paiement'|
    |       3        | 18  | 'Change'  |
    Etc etc ...

    Voici donc la requête que je voudrais effectuer : prendre toutes les valeurs dont le caractère est Change et les soustraire aux valeurs dont le type est paiement. J'ai essayé avec des jointures internes mais je ne suis pas familier avec ce type de jointures.

    Merci de votre aide !

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    voici une requete qui pourrait vous aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT id_transaction , 
               SUM ( 
                        CASE caractere
                        WHEN 'Paiement'  THEN
                           val
                        ELSE
                           - val
                        END) 
    FROM  mouvements_monetaires
    GROUP BY id_transaction
    A tester et adapter.

    Bon courage

  3. #3
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    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 id_transaction_paie,val_paiement-val_change
     
    from
    (SELECT    id_transaction id_transaction_paie,   SUM ( val) val_paiement
    FROM  mouvements_monetaires
    where caractere='paiement'
    GROUP BY id_transaction)A,
     
    (SELECT    id_transaction id_transaction_chg  SUM ( val) val_change
    FROM  mouvements_monetaires
    where caractere='change'
    GROUP BY id_transaction)B
     
     
    where 
     
    A.id_transaction_paie=id_transaction_chg

  4. #4
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    Merci yanika ta solution est parfaite je ne connaissais pas l'instruction case.

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

Discussions similaires

  1. Comment associer 2 champs d'une même table?
    Par zibizibi2 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 31/12/2014, 20h06
  2. Update critériel de plusieurs champs d'une même table
    Par Xorbane dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/10/2007, 18h12
  3. Conditions sur les champs d'une même table
    Par Pucho dans le forum Modélisation
    Réponses: 10
    Dernier message: 19/10/2007, 17h52
  4. Plusieurs Champs d'une même table dans plusieurs textebox
    Par cyberbiker dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/09/2006, 11h32
  5. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18

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