Annonce
Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.
Vous allez recevoir un message pour effectuer ce changement de mot de passe.
Merci de bien respecter les règles préconisées.
#1 Thu 16 September 2021 09:52
- Marie10634
- Juste Inscrit !
- Date d'inscription: 5 May 2020
- Messages: 2
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 .
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 v_donnee1 = 1 e_donne1 = 1 v_donne1 = 2 e_donne1 = 2 v_donnee2 = 1 e_donne2 = 1 v_donne2 = 2 e_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:
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:
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:
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'avance merci pour votre retour!
Hors ligne
#2 Thu 16 September 2021 11:52
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1134
Re: Jointure 3 tables et résultat transposé
Bonjour,
l'extension tablefunc pourra sans doute épondre à votre besoin.
https://docs.postgresql.fr/13/tablefunc.html
Dernière modification par tumasgiu (Thu 16 September 2021 11:53)
Hors ligne