Jointure 3 tables et résultat transposé
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 8O.
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:
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_zone |
Code:
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 |
me met un code erreur 21000 plus d'une ligne renvoyée par une sous-requête
Code:
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 |
Je tourne un peu (beaucoup) en rond et un peu d'aide m'éclairerait graaaaandement :D!
D'avance merci pour votre retour!