PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → [WD23] Editeur de requêtes et fonction ABS()
[WD23] Editeur de requêtes et fonction ABS()
Iniciado por Dergen, dez., 10 2018 1:35 PM - 12 respostas
Membro registado
329 mensagems
Popularité : +28 (32 votes)
Publicado em dezembro, 10 2018 - 1:35 PM
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 -
Membro registado
352 mensagems
Popularité : +12 (18 votes)
Publicado em dezembro, 10 2018 - 2:05 PM
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
Membro registado
329 mensagems
Popularité : +28 (32 votes)
Publicado em dezembro, 10 2018 - 9:07 PM
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 -
Mensagem modificada, dezembro, 10 2018 - 9:08 PM
Membro registado
26 mensagems
Publicado em dezembro, 11 2018 - 8:27 AM
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
Membro registado
28 mensagems
Popularité : +1 (1 vote)
Publicado em dezembro, 11 2018 - 8:41 AM
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

--
(\ _ /)
(='.'=)
(")-(")
Mensagem modificada, dezembro, 11 2018 - 8:43 AM
Membro registado
28 mensagems
Popularité : +1 (1 vote)
Publicado em dezembro, 11 2018 - 8:46 AM
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.

--
(\ _ /)
(='.'=)
(")-(")
Membro registado
329 mensagems
Popularité : +28 (32 votes)
Publicado em dezembro, 11 2018 - 10:00 AM
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 -
Membro registado
2.572 mensagems
Popularité : +222 (260 votes)
Publicado em dezembro, 11 2018 - 11:09 AM
@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
Mensagem modificada, dezembro, 11 2018 - 11:12 AM
Membro registado
28 mensagems
Popularité : +1 (1 vote)
Publicado em dezembro, 11 2018 - 11:55 AM
@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

--
(\ _ /)
(='.'=)
(")-(")
Membro registado
329 mensagems
Popularité : +28 (32 votes)
Publicado em dezembro, 11 2018 - 2:45 PM
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 -
Membro registado
28 mensagems
Popularité : +1 (1 vote)
Publicado em dezembro, 11 2018 - 3:26 PM
@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

--
(\ _ /)
(='.'=)
(")-(")
Membro registado
329 mensagems
Popularité : +28 (32 votes)
Publicado em dezembro, 11 2018 - 9:23 PM
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 -
Membro registado
2.572 mensagems
Popularité : +222 (260 votes)
Publicado em dezembro, 12 2018 - 9:36 AM
@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