PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD23] Editeur de requêtes et fonction ABS()
[WD23] Editeur de requêtes et fonction ABS()
Débuté par Dergen, 10 déc. 2018 13:35 - 12 réponses
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 10 décembre 2018 - 13:35
Bonjour,

Dans l'éditeur de requête, on trouve dans les possibilitées la fonction SUM() mais si on a besoin de faire un ABS(SUM())

Peux-on le faire dans l'éditeur de requêtes et si oui, comment ?

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
352 messages
Popularité : +12 (18 votes)
Posté le 10 décembre 2018 - 14:05
Bonjour, pour faire un SUM(), il faut faire un GROUP BY
Vous pouvez lire cet article pour mieux se familiariser avec ; https://sql.sh/cours/group-by
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 10 décembre 2018 - 21:07
J’ai pas de PB avec la fonction SUM mais c’est arriver à faire un ABS() qui je ne trouve pas dans l’éditeur de requêtes !

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Message modifié, 10 décembre 2018 - 21:08
Membre enregistré
26 messages
Posté le 11 décembre 2018 - 08:27
Bonjour,
Il est possible d'utiliser la fonction SQL ABS dans une requête (en tout cas c'est ce que dit la documentation :p)





sinon il est toujours possible d'utiliser les commande wlangage en les préfixant avec "wd.", c'est une astuce qui permet même de créer ses propres "fonction" SQL et ça c'est cool :D

Bonne journée.

Amicalement
Membre enregistré
28 messages
Popularité : +1 (1 vote)
Posté le 11 décembre 2018 - 08:41
Bonjour Dergen,

En fait il faut faire la fonction ABS avant le SUM :
SELECT
Commande.IDCOMMANDE AS IDCOMMANDE,
SUM(ABS( Commande.Quantité ) ) AS la_somme_Quantité
FROM
Commande
GROUP BY
Commande.IDCOMMANDE


J'ai édité la requête manuellement et fait une rétro analyse

--
(\ _ /)
(='.'=)
(")-(")
Message modifié, 11 décembre 2018 - 08:43
Membre enregistré
28 messages
Popularité : +1 (1 vote)
Posté le 11 décembre 2018 - 08:46
Sinon tu crée une nouvelle requête, tu prend l'ID (par exemple) de ton fichier. Ensuite tu va sur rubrique calculer, tu fais ABS(Fichier.Quantité), tu valide et ensuite tu fais la somme sur la formule.

--
(\ _ /)
(='.'=)
(")-(")
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 11 décembre 2018 - 10:00
Geoffrey ZIMMERMANN a écrit :
Sinon tu crée une nouvelle requête, tu prend l'ID (par exemple) de ton fichier. Ensuite tu va sur rubrique calculer, tu fais ABS(Fichier.Quantité), tu valide et ensuite tu fais la somme sur la formule.

--
(\ _ /)
(='.'=)
(")-(")



Merci, c'est exactement ce que je cherchait :merci:

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
2 572 messages
Popularité : +222 (260 votes)
Posté le 11 décembre 2018 - 11:09
@Dergen: Ce que tu cherches à faire n'est pas possible en HFSQL. Il te faut faire une sum de tes valeurs et ensuite par code faire la valeur absolue du résultat. C'est une des limites de HFSQL.

Erreur :Les fonctions agrégats (COUNT, AVG, SUM, MIN, MAX) ne sont pas autorisées en dehors des clauses SELECT ou HAVING



@Geoffrey ZIMMERMANN: ce que tu lui dis de faire est faux. Faire la somme des valeurs absolues n'est pas la même chose que faire la valeur absolue de la somme. Il va donc se retrouver avec des données erronées.

Soit les données:
1
2
-8
6
14
-9


La somme des valeurs absolues donne : 40
La valeur absolue de la somme donne : 6

Donc 2 valeurs absolument différentes.

--
Cordialement,

Philippe SAINT-BERTIN
Message modifié, 11 décembre 2018 - 11:12
Membre enregistré
28 messages
Popularité : +1 (1 vote)
Posté le 11 décembre 2018 - 11:55
@Philippe SB et @Dergen, autant pour moi. C'était une méthode que j'utilisais, mais j'avais besoin dans mon cas que toute les valeurs soient d'abord positive avant d'en faire la somme.

Dans ce cas, peut-être une fonction SQL peu faire l'affaire

--
(\ _ /)
(='.'=)
(")-(")
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 11 décembre 2018 - 14:45
Je ne suis pas en HFSQL mais en Oracle.

Et sur cette requête bien spécifique, toute les valeurs sont en négatif.

Je vient de comparer la requête proposé par Geoffrey SUM(ABS()) dans l'éditeur de requêtes avec comme résultat:
Client  Pals    Colis   UVCs
---------- ---------- ---------- ----------
39      5       180     180
77      33      516     322776
81      22      169     169
88      34      34      34


Et une requête SQL directe dans Oracle ABS(SUM()) avec comme résultat :
CLIENT   PALETTES      COLIS        UVC
---------- ---------- ---------- ----------
        39          5        180        180
        77         33        516     322776
        81         22        169        169
        88         34         34         34


Pour moi le résultat des 2 méthodes donne un résultat identique...

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
28 messages
Popularité : +1 (1 vote)
Posté le 11 décembre 2018 - 15:26
@Dergen,

Oui pas de soucis dans ce cas, mais si tu as des valeurs négatives à additionner, alors ça devient faux. Si jamais tu as :

39 + -5 = 34 ET PAS 39 + 5 = 44

--
(\ _ /)
(='.'=)
(")-(")
Membre enregistré
329 messages
Popularité : +28 (32 votes)
Posté le 11 décembre 2018 - 21:23
Dans mon cas (bien particulier) toute mes valeurs sont négative, logique vu qu’il s’agit de sortie de stock.

--
———————————————————————————————————
Ce qui se conçoit bien se code clairement et se débogue facilement...

- Pastiche d’une citation de Nicolas Boileau -
Membre enregistré
2 572 messages
Popularité : +222 (260 votes)
Posté le 12 décembre 2018 - 09:36
@Dergen: Attention le négatif pour une sortie est une vue de l'esprit. Nombreux sont les fichiers de mouvements de stock ou toutes les valeurs sont positives et la ligne typée , exemple: 'E' pour entrée et 'S' pour sortie.

J'ai même vu des fichiers ou il y a une colonne entrée et une colonne sortie et ou dans la colonne sortie la valeur peut-être positive ou négative selon si le client a fait un retour de marchandise. Aberrant certes, mais ça existe., d'où toujours préférer de faire les opérations dans le bon sens pour éviter les problèmes par la suite.

--
Cordialement,

Philippe SAINT-BERTIN