PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Problème de requête : urgent
Problème de requête : urgent
Iniciado por masdivers, 10,nov. 2004 09:18 - 5 respuestas
Publicado el 10,noviembre 2004 - 09:18
Bonjour ,

Je bute sur un problème de prime abord simple mais plus compliqué qu'il n'y parait :

je désire réalisé un état qui me listerait la situation de tous les clients : Total de leurs achats, de leurs travaux et de leurs acomptes. Dans l'analyse, tous les fichiers sont reliés par une relation simple (0-n, 1-1) par l'identifiant.

jusque là c'est simple. Mais voilà, si un des clients n'aurait pas un acompte par exemple, et bien il n'apparaitra pas dans la liste même s'il a des travaux et des achats. Comment lui faire lister tout de même le client et que s'il ne rencontre pas d'enregistrement pour ce client dans le fichier adéquat et bien qu'il mette la valeur 0.00 ????

SVP un coup de main serait la bien venu pour un débutant

Merci d'avance de votre soutient

Cordiales salutations
Publicado el 10,noviembre 2004 - 10:17
Si tu passes par une requête SQL pour récupérer le résultat, il faut faire un left outer join entre la table des clients et la tables des achats:
Avec une seule table, celà donne une requête du style:
select * from client left outer join acompte on acompte.idclient = client.ident.


Frédéric.
Publicado el 10,noviembre 2004 - 10:20
Voir du côté des jointures externes (taper join dand l'aide en ligne).

On trouve par exemple l'aide suivante :

Exemple : Le code SQL suivant permet de lister le montant total dépensé par chaque client. Même les clients n'ayant jamais passé de commande seront sélectionnés.


SELECT CLIENT.NomClient,
SUM(COMMANDE.TotalTTC) AS TotalTTC
FROM CLIENT LEFT OUTER JOIN COMMANDE
ON (CLIENT.NumClient = COMMANDE.NumClient)
GROUP BY CLIENT.NomClient

Si tu utilises l'éditeur de requête ->cliquer sur "Avancé" (dans l'écran de construction de la requête) puis choisir sa base et "jointure" -> il faut cocher une case pour voir tous tes clients : ce qui revient à la syntaxe ci-dessus.


Michel.
Publicado el 10,noviembre 2004 - 10:46
Bonjour,

select a.client,
(select sum(achats) from tbl_achats where client = a.client) ,
(select sum(travaux) from tbl_travaux where client = a.client),
(select sum(acomptes) from tbl_acomptes where client = a.client)
from clients a
group by a.client

fonctionne sous SQL2000 (testé)

salutations
Publicado el 10,noviembre 2004 - 14:26
Super merci !

Les clients sont effectivements listés même s'ils n'ont pas d'achats

Toutefois, pour ce qui est des travaux la somme se fait juste mais pour les Achats et les Acomptes ... ? Bizzare

je t'explique les Achats des Clients n'existant pas sont remplacés par 1'999'998.88 au lieu de 0.00
les Acomptes n'existant pas sont remplacés par 0.00 mais les totaux sont faux ????

qu'en penses-tu ?

Merci pour toute l'aide que tu voudras bien m'apporter et cordiales salutations
Publicado el 10,noviembre 2004 - 14:27
Super merci !

Les clients sont effectivements listés même s'ils n'ont pas d'achats

Toutefois, pour ce qui est des travaux la somme se fait juste mais pour les Achats et les Acomptes ... ? Bizzare

je t'explique les Achats des Clients n'existant pas sont remplacés par 1'999'998.88 au lieu de 0.00
les Acomptes n'existant pas sont remplacés par 0.00 mais les totaux sont faux ????

qu'en penses-tu ?

Merci pour toute l'aide que tu voudras bien m'apporter et cordiales salutations