Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

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

 

Pied de page des forums

Powered by FluxBB