Bonjour,
je souhaite récupérer différentes informations agrégées (sum) à partir de plusieurs tables et selon différentes conditions dans une même requête sql. Et ceci afin d'alimenter une vue.
En clair :
J'ai trois tables : T_Principale, T1, T2
T_Principale contient les champs 'date', 'lieu', 'produit' et 'montant_vente'
T1 contient des infos sur le produit comme 'type_produit'
et T2 contient des infos sur le lieu comme 'pays_lieu'
T_Principale est liée à T1 et T2 par des clés étrangères.
et je voudrais obtenir quelque chose du genre :
pour chaque ensemble (date,lieu,produit), je voudrais les colonnes :
- 'montant_vente_typeProduit1' correspondant à sum(montant_vente) avec une jointure T_Principale - T1 where type_produit = 1
- 'montant_vente_typeProduit2' correspondant à sum(montant_vente) avec une jointure T_Principale - T1 where type_produit = 2
- 'montant_vente_PaysA' correspondant à sum(montant_vente) avec une jointure T_Principale - T2 where lieu_produit = A
- 'montant_vente_PaysB' correspondant à sum(montant_vente) avec une jointure T_Principale - T2 where lieu_produit = B
exemple :
T_Principale
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 date lieu produit montant_vente 15/07/09 1 1 50 15/07/09 1 2 100 15/07/09 1 1 20 17/07/09 2 1 300 17/07/09 1 1 50 17/07/09 2 1 400 17/07/09 2 1 500 T1 produit type_produit 1 1 2 2 T2 lieu type_lieu 1 A 2 B
En résultat :
Je ne sais pas du tout quel type de requête utiliser : sous-requête, table temporaire, union?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 date lieu produit montant_vente 15/07/09 1 1 70 15/07/09 1 2 100 17/07/09 2 1 1200 17/07/09 1 1 50
J'ai tenté quelque chose du genre :
sachant que j'ai essayé avec un group by et sans group by à l'intérieur des requêtes, sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select date, lieu, produit, (select sum(...) from ...requête renvoyant la somme pour le produit type 1), (select sum(...) from ...requête renvoyant la somme pour le produit type 2), (select sum(...) from ...requête renvoyant la somme pour le produit lieu A), (select sum(...) from ...requête renvoyant la somme pour le produit lieu A) from T_Principale group by date, lieu, produit
ça me parait logique que ça soit faux mais je ne vois pas comment y remédier.
Toute idée sera la bienvenue.
Partager