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é ?

#1 Thu 16 September 2021 09:52

Marie10634
Membre
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: 1059

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

Partagez  |