Bonjour,
Ce n'est sans doute pas bien dur mais je cale.
Je dois sortir le chiffre réalisé par les clients d'une société, y compris ceux qui n'ont effectué aucun chiffre, dans un laps de temps donné. Je dois filtrer les clients sur base de leur catégorie professionnelle.
Pour se faire je dispose de 3 tables :
Clients:
- CodeClients
- NomClient
- CodeCatProf
- Société
- ...
VentesEnt (les entêtes des bons de ventes)
- CodeClients
- Société
- NuméroBon
- DateBon
- ...
VentesLig (les lignes des bons de ventes, une par article vendu)
- CodeArticle
- CAHT (chiffre d'affaire hors taxe de la ligne)
- QtéUF (Quantité en unité de facturation)
- NuméroBon
- DateBon
- Société
- ...
Pour extraire les totaux de CAHT par client, je sais que je dois utiliser SUM(VentesLig.CAHT) et GROUP BY (Clients.CodeClient).
Je sais aussi que je vais devoir sortir les clients qui n'ont effectué aucune vente. Il y aura donc une jointure externe dans le lot.
Il y aura aussi une condition sur CodeCatProf et sur Société.
Voici ma requête après quelques essais. Elle me renvoie correctement le CA par client mais je n'ai pas les clients qui n'ont pas effectué de vente.
Je préviens tout de suite, je sais pertinemment que les jointures sont moches et que les clés primaires et étrangères devraient être plus propres. Soit, c'est la seule façon que j'ai de lier ces tables actuellement, je fais avec.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 SELECT Clients.CodeClient, Sum(VentesLig.CAHT) FROM Clients LEFT JOIN VentesEnt ON (Clients.CodeClient = VentesEnt.CodeClient AND Clients.Société = VentesEnt.Société) INNER JOIN VentesLig ON (VentesEnt.DateBon = VentesLig.DateBon AND VentesLig.Société = VentesEnt.Société AND VentesLig.NuméroBon = VentesEnt.NuméroBon) WHERE Clients.Société=17 AND VentesLig.DateBon Between 20170000 And 20180000 AND (Clients.CodeCatProf Between 1 And 12 OR Clients.CodeCatProf Between 16 And 22 OR Clients.CodeCatProf Between 30 And 39) GROUP BY VentesEnt.CodeClient
Et je ne parle même pas des champs dates...
Bref, en acceptant tous les défauts d'architecture de cette DB. Comment faire avec mes jointures pour arriver à mon résultat ?
Merci de votre aide.
Catab
Partager