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 :

Probleme de sum dans une requete SQL


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Points : 103
    Points
    103
    Par défaut Probleme de sum dans une requete SQL
    Bonjour à tous,

    j'ai un problème tout bête dans une requête SQL mais je bute dessus depuis hier et je craque un peu :

    Je veux sortir un grand livre d'écritures comptables pour une période et faire apparaitre le solde (a nouveau) d'avant période.

    Je fais saisir différents paramètres : compte de debut, compte de fin, date début, date de fin ...

    Ma requete ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Select   No_compte, nom, date_ecriture, piece, no_document, designation, debit, credit,
     
    (select sum(debit) 
      from fic_ecriture 
      where date_ecriture < @datedebut) as 'a nouveau debit',
     
    (select sum(credit) 
      from fic_ecriture 
      where date_ecriture < @datedebut) as 'a nouveau credit'
     
    from fic_ecriture 
    where date_ecriture >= @datedebut 
      and date_ecriture <= @datefin
    puis j'affiche :
    a nouveau débit 12000 a nouveau crédit 500 solde 11500

    date pièce document désignation débit crédit
    21/01/09 123456 fact01 facture 1 120 0
    23/02/09 456789 fact 02 facture 2 300 0

    etc ...

    Cela marche très bien lorsqu'il existe des écritures dans la fourchette de date demandée . Je récupère sur chacune des lignes mon a nouveau débit et a nouveau crédit que j'affiche en haut. mais dans le cas ou je demande une période dans laquelle il n'y a pas d'écritures, ma requête ne me retourne aucun résultat, aucune ligne (alors que je voudrais récupérer mes valeurs d' a nouveau débit et d' a nouveau crédit). Comment puis je faire pour récupérer au moins une ligne avec mes a nouveaux ?

    Pour info je bosse sous sqlserver 2005.

    Merci d'avance de votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez essayer ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With Past_Ecriture (Deb, Cre) AS
    (
    SELECT sum(debit), sum(credit)
      FROM fic_ecriture 
     WHERE date_ecriture < @datedebut
    )
    SELECT FE1.No_compte, FE1.nom, FE1.date_ecriture, FE1.piece, FE1.no_document,
           FE1.designation, FE1.debit, FE1.credit,
           FE2.Deb AS 'a nouveau debit', FE2.Cre AS 'a nouveau credit'
      FROM Past_Ecriture AS FE2
           LEFT OUTER JOIN fic_ecriture AS FE1
             ON FE1.date_ecriture >= @datedebut 
            AND FE1.date_ecriture <= @datefin;

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Les conditions sur FE1.date_ecriture ne devraient-elles pas figurer au niveau de la jointure?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Si complètement, j'édite !

  5. #5
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonsoir,

    Ce morceau de code permet de manipuler une table temporaire dans la requete ?

    WITH Past_Ecriture (Deb, Cre) AS
    (
    SELECT sum(debit), sum(credit)
    FROM fic_ecriture
    WHERE date_ecriture < @datedebut
    )

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    En quelque sorte oui, vous trouverez une définition des CTE ici : http://sqlpro.developpez.com/cours/s...cursives/#LIII

  7. #7
    Membre régulier
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Points : 103
    Points
    103
    Par défaut
    Bonjour à tous et merci pour vos réponses,

    finalement je m'en sorti en utilisant l'UNION. en gros ça donne ça :

    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
    SELECT   No_compte, nom, date_ecriture, piece, no_document, designation, debit, credit
    FROM fic_ecriture as FE1
    WHERE date_ecriture >= @datedebut 
    AND date_ecriture <= @datefin
     
    UNION
     
    SELECT No_compte, nom, Null as date_ecriture, Null as piece, Null as no_document, 'A nouveau' as designation, 
       (SELECT sum(debit) 
        FROM fic_ecriture as FE2
        WHERE No_compte = FE1.No_compte AND date_ecriture < @datedebut) AS 'debit',
     
       (SELECT sum(credit) 
       FROM fic_ecriture as FE2
       WHERE No_compte = FE1.No_compte AND date_ecriture < @datedebut) AS  'credit',
     
    FROM fic_ecriture 
    WHERE date_ecriture >= @datedebut 
      AND date_ecriture <= @datefin
     
    ORDER BY No_compte, date_ecriture


    Ainsi, pour chaque compte, la première ligne que je récupère contient dans la colonne débit mon 'a nouveau débit' et ma colonne crédit 'mon a nouveau crédit'.
    C'est certainement pas la solution la plus élégante mais ça fonctionne.

    La manipulation de tables temporaire m'était étrangère jusqu'à maintenant mais je vais creuser la proposition de Waldar qui a l'air bien interessante.

    Merci
    bonne journée

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

Discussions similaires

  1. [MySQL] probleme de syntaxe dans une requete sql
    Par nico le noob dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/08/2010, 02h10
  2. Probleme d'encodage dans une requete SQL
    Par kedare dans le forum Général Python
    Réponses: 1
    Dernier message: 25/03/2009, 17h52
  3. [Access] Probleme de count dans une requete sql
    Par castelligreg dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/04/2006, 16h20
  4. [sql]Probleme de count dans une requete sql (sous access)
    Par castelligreg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2006, 16h06
  5. [MySQL] probleme de syntaxe dans une requete sql
    Par jeanfrancois dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/03/2006, 10h54

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