PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Message sql d'agrégats
Message sql d'agrégats
Débuté par Simo, 11 avr. 2025 13:05 - 1 réponse
Posté le 11 avril 2025 - 13:05
Bonjour
J'ai un message d'erreur d'agrégats merci d'avance de me corriger mon problème
dans cette j'ai le message suivant :
Les fonctions agrégats(COUNT, AVG, SUM, MIN, MAX) ne sont pas autoriseés endehors des clauses SELECT ou HAVING
Erreur detectée ligne 6, colonne 12:
IFNULL(>>>>SUM(CASE WHEN AC.EtatCommandeLigne IN('FA,'BL') AND AC.TypeDocument IN('0','3') THEN AC.Quantite_Livr ELSE 0 END

req est une Requête SQL =
[
SELECT
A.Reference, //-- Référence de l'article
A.ARTICLE, //-- Libellé de l'article

//-- Calcul des achats nets
IFNULL(SUM(CASE
WHEN AC.EtatCommandeLigne IN ('FA', 'BL') AND AC.TypeDocument IN ('0', '3') THEN AC.Quantite_Livr
ELSE 0
END), 0) AS TotalAchats,

IFNULL(SUM(CASE
WHEN AC.EtatCommandeLigne IN ('AV', 'RB', 'RT', 'RS', 'BF') THEN AC.Quantite_Livr
ELSE 0 END), 0) AS TotalAvoirs,

//-- Calcul des ventes nettes
IFNULL(SUM(CASE
WHEN VC.EtatCommandeLigne IN ('FA', 'BL', 'TK', 'BS', 'ED') THEN VC.Quantite_Livr
ELSE 0 END), 0) AS TotalVentes,

IFNULL(SUM(CASE
WHEN VC.EtatCommandeLigne IN ('AV', 'RB', 'RT', 'RS', 'RD') THEN VC.Quantite_Livr
ELSE 0 END), 0) AS TotalVentesAvoirs,

//-- Calcul du stock = Achats - Ventes
(IFNULL(SUM(CASE
WHEN AC.EtatCommandeLigne IN ('FA', 'BL') AND AC.TypeDocument IN ('0', '3') THEN AC.Quantite_Livr
ELSE 0 END), 0)
IFNULL(SUM(CASE
WHEN VC.EtatCommandeLigne IN ('FA', 'BL', 'TK', 'BS', 'ED') THEN VC.Quantite_Livr
ELSE 0 END), 0)) AS Stock

FROM
FARTICLES A
LEFT JOIN FLigneCde_A AC ON AC.Reference = A.Reference
LEFT JOIN FLigneCde VC ON VC.Reference = A.Reference

WHERE
A.NonUtilisé = 0
AND A.ArticleBloque = 0
AND A.Service = 0
AND AC.NumSite = 1
AND VC.NumSite =1
AND AC.Annee = 2025
AND VC.Annee =2025
AND AC.ND=1
AND AV.ND=1
GROUP BY
A.Reference, A.ARTICLE
]


POUR TOUT req
ligne= TABLE.AjouteLigne()

// Récupération des données de la requête et remplissage dans la table mémoire
COL_Refrence[ligne] = req.Reference
COL_Article[ligne] = req.ARTICLE
COL_Stock[ligne] = req.Stock
COL_Vente[ligne] = req.TotalVentes
COL_ACHETE[ligne] = req.TotalAchats
COL_Ecart[ligne] = req.TotalVentes - Abs(req.Stock)
FIN
Membre enregistré
43 messages
Posté le 11 avril 2025 - 16:37
Bonjour,
Difficile à tester sans base, personnellement je supprimerai les IFNULL, puis je transformerait ma requête principale en sous requête pour pouvoir récupérer les résultats et appliquer les IFNULL à ce moment là.

Cordialement.