Annonce
Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).
En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.
#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: 1129
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