SUM dans SQL

Signaler
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
-
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
-
Bonjour,

j'ai écrit une requête avec la fonction SUM:

monSql:= 'SELECT Import.* , sum(Euros) Total_Euros FROM Import where (Import.Libelle like ''%' + UpperCase(Edit2.Text) + '%'') GROUP BY Compteur, Date_Opé, libelle, euros, francs ';
Query1.sql.Clear;
Query1.sql.Text:=monSql ;
Query1.Active:=True;

Quand je veux afficher dans un TEdit la valeur de Total_Euros :

Edit3.Text:=CurrToStrF(Query1.Fieldbyname('Total_Euros').asCurrency,fffixed,2);

j'ai juste la valeur Euros du dernier enregistrement

Comment je peux faire sous Delphi pour récupérer la somme de Total_Euros ???

D'avance merci

Codial

10 réponses

Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
1
As tu essayer de faire Select Sum(Total_euro) as Total from TaTable

Puis Tedit.Text:=CurrToStrF(Query1.fieldbyname('Total').asCurrency,fffixed,2)

La puce
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,
oui j'ai essayé car ça a été ma première syntaxe j'ai découvert celle sans AS en parcourant le forum.

Cordialement

Codial
Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
1
Dans ce cas désolé mais je sais pas comment sela ce fait, je ne peut pas t'aider d'avantage.
En espèrant que quelqu'un d'autre pourra le faire.
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Merci quand même pour la réponse:

Cordialement

Codial
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Je suggère que tu reprennes la solution proposée par lapucedu88. C'est la seule formulation qui te donnera la somme de la colonne Total_Euro.

En mélangeant des aggrégats et des non aggrégats, on est obligé, en SQL, d'ajouter une claude ORDER BY. En faisant cela, la requête, dans ton cas précis, effectue une somme de la oclonne Total_Euro uniquement pour chaque regroupement demandé et non sur l'ensemble de la table.
D'ailleurs, je me demande si certaines colonnes dans la clause order by ont un sens dans le contexte d'utilisation.

Enfin, un petit conseil : pour éviter l'injection SQL, remplace UpperCase(Edit2.Text) par QuotedStr(UpperCase(Edit2.Text)). Si tu ne fais rien, tu crées une belle faille de sécurité

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
N'as-tu pas un champ du même nom dans "Import.* " ??

Dom
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,

Je comprends pas vraiment car il semble que je sois obligé de mettre un ORDER BY sinon j'ai le message d'erreur "GROUP BY est nécessaire quand à la fois des champs globausx et non-globaux sont utilisés dans l'ensemble résultat."

Oui c'est juste la requête effectue un effectue une somme de la oclonne Total_Euro uniquement pour chaque regroupement et non sur l'ensemble de la table et ce n'est pas ce que je veux!!

Pour arriver à ce que je veux en fait je suis obligé de balaiyer tous les enregistrements en incrémentant le champ Euros de sa valeur pour avoir le total.

Encore merci pour les réponses

Codial
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
Pourquoi rappeller le champ euros dans ton "order by" ?

Dom
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,

il me semble que les champs de l'ORDER BY doivent correspondent à ceux du SELECT non?

Codial
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
Désolé,
Bonjour,
Dans le group by ....
Ta requête ne devrait-elle pas être :
select Compteur, Date_Opé, libelle,sum( euros ) as totaleuros,sum(francs) as totalfranc from import group by compteur,date_opé,libelle

ainsi pour chaque groupe de Compteur, Date_Opé, libelle tu aurais une somme de francs et une somme d'euros ...



Dom