Bonjour à tous,
J'ai pas mal épluché les forums, mais je vous avoue ne pas arriver à transposer ce que j'ai pu lire à ma problématique .
Je travaille sous postgres 12.
J'ai trois tables:
table des zones t_zone
id_zone nom_zone 1 nom_zone1 2 nom_zone2
table des données date1 t_donnee1
id_donnee1 nom_zone valeur_donnee1 employe 1 nom_zone1 1 A 2 nom_zone1 2 B 3 nom_zone2 1 B 4 nom_zone2 2 A
table des données date2 t_donnee2
id_donnee2 nom_zone valeur_donnee2 employe 1 nom_zone1 1 B 2 nom_zone1 2 A 3 nom_zone2 1 A 4 nom_zone2 2 B
Je souhaiterai comme résultat
id_zone nom_zone valeur_donnee1 = 1 employe_donne1 = 1 valeur_donne1 = 2 employe_donne1 = 2 valeur_donnee2 = 1 employe_donne2 = 1 valeur_donne2 = 2 employe_donne2 = 2 1 nom_zone1 1 A 2 B 1 B 2 A 2 nom_zone2 1 B 2 A 1 A 2 B
J'ai essayé ce type de requêtes:
me multiplie autant de ligne que de valeurs possibles entre t_zone, t_donnee1 et t_donne2 (dans cet exemple 2^3)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT t_zone.id_zone, t_zone.nom_zone, t_donne1.valeur_donne1, t_donne1.employe, t_donne2.valeur_donne2, t_donne2.employe FROM t_zone LEFT JOIN t_donne1 ON t_zone.nom_zone = t_donne1.nom_zone LEFT JOIN t_donne2 ON t_zone.nom_zone = t_donne2.nom_zoneme met un code erreur 21000 plus d'une ligne renvoyée par une sous-requête
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 SELECT t_zone.id_zone, t_zone.nom_zone, t_donne1.valeur_donne1, t_donne1.employe, t_donne2.valeur_donne2, t_donne2.employe FROM t_zone LEFT JOIN (SELECT DISTINCT t_donne1.valeur_donne1, t_donne1.employe FROM t_donne1 GROUP BY t_donne1.valeur_donne1, t_donne1.employe) t_donne1 ON t_zone.nom_zone = t_donne1.nom_zone LEFT JOIN (SELECT DISTINCT t_donne2.valeur_donne2, t_donne2.employe FROM t_donne2 GROUP BY t_donne2.valeur_donne2, t_donne2.employe) t_donne2 ON t_zone.nom_zone = t_donne2.nom_zone
Je tourne un peu (beaucoup) en rond et un peu d'aide m'éclairerait graaaaandement !
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 select t_zone.id_zone, t_zone.nom_zone, (select t_donne1.valeur_donne1 from t_donne1 where t_zone.nom_zone = t_donne1.nom_zone) t_donne1_valeur_donne1, (select t_donne1.employe from t_donne1 where t_zone.nom_zone = t_donne1.nom_zone) t_donne1_employe, (select t_donne2.valeur_donne2 from t_donne2 where t_zone.nom_zone = t_donne2.nom_zone) t_donne2_valeur_donne2, (select t_donne2.employe from t_donne2 where t_zone.nom_zone = t_donne2.nom_zone) t_donne2_employe from t_zone
D'avance merci pour votre retour!
Partager