IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Jointure 3 tables et résultat transposé


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Femme Profil pro
    tech SIG
    Inscrit en
    juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : tech SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : juin 2018
    Messages : 3
    Points : 3
    Points
    3
    Par défaut 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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'avance merci pour votre retour!

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 328
    Points
    25 328
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Ce que vous cherchez à faire est un pivot, plusieurs solutions sont proposées par Fadace dans son blog ici :
    https://fadace.developpez.com/mssql/pivot/

    Quelques adaptations seront peut-être nécessaires pour tenir compte des écarts syntaxiques entre SQL Server et PostgreSQL

Discussions similaires

  1. SQL : jointure sur table qui fait qui enlève des résultats
    Par nysay27 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/09/2020, 13h51
  2. Jointure de table avec Interbase
    Par ada_b dans le forum InterBase
    Réponses: 21
    Dernier message: 12/05/2010, 19h52
  3. Réponses: 7
    Dernier message: 10/02/2005, 00h13
  4. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50
  5. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo