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 :

Problème avec une requête


Sujet :

SQL Oracle

  1. #1
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut Problème avec une requête
    salut
    j'ai deux tables je voudrais faire la différence entre deux champs
    la somme de champ montant de la table A - la somme champ montant de la table B pour même l'année
    exemple
    CPT_GLE EXERCICE MONTANT
    631420 12010 486000,00
    631420 12010 480000,00
    631420 22010 50,00

    la somme table A 966050,00

    CPT_GLE EXERCICE Montant
    631420 12010 966000,00
    631420 22010 940500,00

    la somme table B 1906500,00


    alors avoir

    CPT_GLE différence
    631420 966050,00-1906500,00

    ma requête est fausse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     select b.cpt_gle, sum (montant)-b.total_mvt_debit as difirence
    from résultat t ,balance b
    where t.compte=b.cpt_gle    and t.exercice=b.periode
    and t.exercice like '%2010%'and t.compte='631420'
     group by  b.cpt_gle,total_mvt_debit
    ça donne
    1 631420 -940450
    2 631420 0

    je voudrais afficher que

    631420 -940450


    merci

  2. #2
    Membre habitué Avatar de Razorflak
    Homme Profil pro
    Développeur Flex/AS3
    Inscrit en
    Juin 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Flex/AS3
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 97
    Points : 192
    Points
    192
    Par défaut
    Bonjour,
    Tu peux faire sa en passant par un sous select. Dans ce sous select, tu prends la somme provenant de chaque table et tu fais la différence dans ton select "principal".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select a - b as result from (Select sum(T1.colonne1) a, sum(T2.colonne2) b
             from T1,T2
             where T1.ID = T2.ID)
    En espérant t'avoir aidé.

    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Points : 339
    Points
    339
    Par défaut
    Bonjour,

    Vous voulez réaliser la différence entre la somme de resultat.montant et la somme de b.total_mvt_debit pour l'ensemble des lignes sélectionnées (c'est-à-dire, par exemple, que vous ne voulez pas que cette différence soit évaluée pour chaque valeur de b.cpt_gle) ?

    Alors, il suffit d'éliminer la clause group by (car dans votre version, la fonction de groupe est évaluée pour chaque combinaison b.cpt_gle de total_mvt_debit), de supprimer b.cpt_gle dans la clause SELECT et d'appeler la fonction SUM sur b.total_mvt_debit. Les conditions de jointure ne changent pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT sum (montant)-sum(b.total_mvt_debit) AS difference
    FROM résultat t ,balance b
    WHERE t.compte=b.cpt_gle    AND t.exercice=b.periode
    AND t.exercice LIKE '%2010%'AND t.compte='631420'

  4. #4
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut
    la requête est fausse
    ça donne -1906450 au lieu 940450

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Points : 339
    Points
    339
    Par défaut
    D'accord, une manipulation supplémentaire est nécessaire : inverser les deux termes de la soustraction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT sum(b.total_mvt_debit) - sum (montant)AS difference
    FROM résultat t ,balance b
    WHERE t.compte=b.cpt_gle    AND t.exercice=b.periode
    AND t.exercice LIKE '%2010%'AND t.compte='631420'
    Et là, d'après les valeurs que vous avez données, on devrait avoir 1906500,00 - 966050,00 = 940450 au lieu de 966050,00 - 1906500,00 = -1906450

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

Discussions similaires

  1. [TADOQuery] Problème avec une requête
    Par yannba dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/01/2006, 13h51
  2. Problème avec une requête
    Par demonark dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/09/2005, 05h35
  3. Problème avec une requête
    Par ringostarr dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/04/2005, 20h34
  4. Problème avec une requête
    Par snoopy69 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/01/2005, 12h39
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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