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

Langage SQL Discussion :

Aide requête SQL


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Aide requête SQL
    Bonjour,

    Je travaille pour un ERP connecté à une base SQL, et j'aimerais dans SQL Management faire une jointure un peu spéciale pour obtenir le résultat voulu.

    Je vous explique mon cas pratique. J'ai une table article classique, code+libellé. A coté, j'ai une table rubrique qui permet pour une entité (une autre table) d'ajouter des données complémentaires.

    Dans l'exemple ci dessous, vous verrez que j'ai trois articles, et que sur le ART1 et ART2 j'y ai lié des rubriques (valeurs complémentaires)

    Nom : ScreenHunter_1148 Aug. 04 09.57.png
Affichages : 121
Taille : 7,3 Ko

    Lorsque que je fais une jointure de mes deux tables, j'obtiens les résultats sous plusieurs lignes
    Mon soucis est que je souhaiterais avoir un résultat dans SQL sous la forme où les rubriques serait des colonnes comme des données de la table article (un schéma sera plus claire)

    Nom : ScreenHunter_1149 Aug. 04 10.04.png
Affichages : 130
Taille : 9,5 Ko

    Est-ce possible? en sachant que mon objectif serait de créer une vue SQL.

    Merci bien à vous

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 300
    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 : 10 300
    Points : 39 641
    Points
    39 641
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il faut faire plusieurs fois la jointure avec la même table :

    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 ART.code
         , ART.libelle
         , RUB1.val as couleur
         , RUB2.Val as taille
         , RUB3.val as pays
    from article as ART
    left outer join rubrique as RUB1
      on RUB1.entite      = 'ARTICLE' 
     and RUB1.code_entite =  ART.code
     and RUB1.code_rubrique = 'COULEUR'
    left outer join rubrique as RUB2
      on RUB1.entite      = 'ARTICLE' 
     and RUB1.code_entite =  ART.code
     and RUB1.code_rubrique = 'TAILLE'
    left outer join rubrique as RUB3
      on RUB1.entite      = 'ARTICLE' 
     and RUB1.code_entite =  ART.code
     and RUB1.code_rubrique = 'PAYS'

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    merci pour la réponse

    Yes, c'est une solution qui fonctionne, mais le problème est que le nombre de rubrique est évolutif, donc je devrais à chaque fois la maintenir

    C'est possible de mettre ces lignes en boucle dynamiques ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    left outer join rubrique as RUB1
      on RUB1.entite      = 'ARTICLE' 
     and RUB1.code_entite =  ART.code
     and RUB1.code_rubrique = 'COULEUR'
    Et en complément que je puisse ensuite accéder aux valeurs des rubriques avec ART.RUB_COULEUR =
    ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 949
    Points : 5 848
    Points
    5 848
    Par défaut
    Ha, les joies du modèle EAV...

    Il faut réaliser un pivot, qui par définition est statique, il faut donc rajouter une étape pour récupérer les différentes rubriques par article avant de pivoter.
    A moins que la liste des rubriques envisageables soit statique et qu'il soit possible de créer pour chaque article, l'ensemble des colonnes avec valeur NULL si pas renseignée dans RUBRIQUE.

    Quel est le SGBD ?

    Ci-dessous un exemple sur oracle pour ce genre de besoin.
    Equivalent de PIVOT et LISTAGG en 10g

    Pour ce qui est de la vue, si le pivot est dynamique ce ne sera pas possible car il faut 2 étapes, il faudra donc créer une procédure ou une fonction plutôt qu'une vue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/11/2007, 22h23
  2. Aide Requête SQL
    Par jjg65 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/07/2007, 10h37
  3. Aide requête SQL - UPDATE phpmyadmin
    Par laulau37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2007, 10h19
  4. Aide requête sql
    Par viny dans le forum PostgreSQL
    Réponses: 18
    Dernier message: 14/09/2006, 21h31
  5. Aide Requête SQL (UPDATE)
    Par Glowprod dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/07/2006, 14h04

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