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 :

Addition de plusieurs champs...


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Addition de plusieurs champs...
    Bonjour à tous,

    Voila je rencontre un petit probleme pour effectuer une requete sql...
    Apparement le probleme vient de la conception de la BDD et je ne sais pas si ce que je souhaite faire sera possible (juste avec une requete...)

    Je dois faire la somme de champs qui sont insérés dans 3 tables :
    SELECT SUM(montant) FROM `beneficie1` WHERE idFiche=xx, SELECT SUM(montant) FROM `beneficie2` WHERE idFiche=xx(idem qu'avant), SELECT SUM(salaireC+salaireD) FROM `fiche` WHERE idFiche=xx(tjrs le meme)...

    D'apres vous quelle pourrait etre la soluce?? recreer une table temporaire?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Salut et bienvenue sur ce forum.

    Faire la somme de plusieurs colonnes résultant d'un calcul SUM ne pose apparemment pas de problème.

    Ex :
    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
    CREATE TABLE C (
      NB INTEGER
    );
     
    CREATE TABLE B (
      NB INTEGER
    );
     
    CREATE TABLE A (
      NB INTEGER
    );
     
    INSERT INTO A VALUES (12);
     
    INSERT INTO B VALUES (120);
    INSERT INTO B VALUES (2);
     
    INSERT INTO C VALUES (10);
    INSERT INTO C VALUES (20000000);
     
    SELECT SUM(A.NB) + SUM(B.NB) + SUM(C.NB) AS TOTAL
    FROM A, B, C;
    La valeur contenue dans 'Total' est bien la somme de toutes les lignes de ces 3 tables.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    ok merci mais faire ce total sans recreer de table est possible??
    ou est on obligé de passer par une table intermédiaire??

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ben dans mon exemple je ne créée pas de table temporaire pour les calculs.
    Il me suffit d'inclure toutes les tables sur lesquelles je souhaite faire mes calculs (ie ayant au moins une colonne figurant dans la somme des SUM) dans la clause FROM.

    Pour ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SUM(B1.montant) + SUM(B2.montant) + SUM(salaireC+salaireD) AS TOTAL
    FROM beneficie1 AS B1, benefice2 AS B2, Fiche AS F
    WHERE B1.idFiche=xx
    AND B2.idFiche=xx
    AND F.idFiche=xx...
    PS : remarque au passage comment les balises de mise en forme rendent mon post vachement plus lisible
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Magnus
    La valeur contenue dans 'Total' est bien la somme de toutes les lignes de ces 3 tables.
    Je ne crois pas, comme tu fais une jointure (et même un produit cartésien ici), tu vas compter plusieurs fois la même ligne, je ferais plutôt :
    Sous ORACLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT SUM(nb) 
    FROM (SELECT SUM(nb) AS nb FROM A
       union all
          SELECT SUM(nb) FROM B
       union all
          SELECT SUM(nb) FROM C)

    Sous SqlServer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (SELECT sum(nb) FROM A) + (SELECT sum(nb) FROM B) + (SELECT sum(nb) FROM C)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Je ne crois pas, comme tu fais une jointure (et même un produit cartésien ici), tu vas compter plusieurs fois la même ligne
    Encore une fois c'est vrai et j'ai encore raconté n'importe quoi

    Autant pour moi.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Encore une fois c'est vrai et j'ai encore raconté n'importe quoi Je traine un boulet...

    Autant pour moi.
    C'est pas grave et je te remercie beaucoup d'avoir essayé !

    Sinon lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT (SELECT sum(montant) FROM beneficie1 WHERE idFiche='1') + (SELECT sum(montant) FROM beneficie2 WHERE idFiche='1') + (SELECT sum(salaireC+salaireD) FROM fiche WHERE idFiche='1')
    il me retourne la valeur "NULL"

    Je suppose que le probleme vient du fait que tous les champs ne sont pas forcement remplis...
    (seul salaire c et d sont remplis pour idFiche=1...

    En tout cas merci à tous pour votre aide....parce que la j'avoue que je suis completement dans les choux !!

    PS: je viens de comprendre la mise en page !!!!!!

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par mozvillat
    Je suppose que le probleme vient du fait que tous les champs ne sont pas forcement remplis...
    Oui

    il faut rajouter des ISNULL (sous SQLServer) à chaque sous-requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ISNULL((SELECT sum(montant) FROM beneficie1 WHERE idFiche='1'), 0) + 
           ISNULL((SELECT sum(montant) FROM beneficie2 WHERE idFiche='1'), 0) + 
           ISNULL((SELECT sum(ISNULL(salaireC, 0) + ISNULL(salaireD, 0)) FROM fiche WHERE idFiche='1'), 0)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Apparement mysql n'interprete pas les ISNULL ....

    Voici l'erreur que ca me genere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     MySQL a répondu :
    #1064 - Erreur de syntaxe pr�s de ' 0) +
           ISNULL((SELECT sum(montant) FROM beneficie2 WHERE ' � la ligne 1
    A moins que ce ne soit pas la même syntaxe pour mySql??

    En tout cas merci pour la réactivié !!!

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Je viens de comprendre pourquoi les requetes ne marchaient pas...

    Dans la bdd, lorsque le champ est vide il n'est pas inséré avec une valeur "null" ou meme '0' mais il n'est pas créé...

    Existe t-il une syntaxe qui permette de passer outree (si idFiche n'existe pas alors on compte 0) ???

  11. #11
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    C'est IFNULL dans mySQL.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup !!!!

Discussions similaires

  1. [AC-2003] Addition de plusieurs champs
    Par krivers dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 11/04/2013, 08h27
  2. Addition de plusieurs champs dans champ indépendant
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 11/11/2005, 09h37
  3. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55
  4. recuperer les id sur plusieurs champs
    Par matN59 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2004, 10h23
  5. [CR9] Plusieurs champs dans details
    Par maxxou dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 28/01/2004, 13h35

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