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 :

Problème de join ou group by ou ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 69
    Par défaut Problème de join ou group by ou ?
    Bonjour,

    J'ai besoin de votre aide pour résoudre mon problème.

    J'ai une table article et une table libellé complémentaire dans laquelle on trouve plusieurs libellés pour le même article sur plusieurs lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ARTICLE :
    NOM LIBELLE
    001  VIS
    002  BOULON
    
    LIBELLECOM :
    NOM POS LIBELLECO
    001  01   CHC
    001  02   6x4
    001  03   INOX
    002  01   M4
    002  02  ACIER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RESULTAT SOUHAITE :
    001 VIS CHC 6X4 INOX
    003 BOULON M4 ACIER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    RESULTAT OBTENU :
    001 VIS CHC
    001 VIS       6X4
    001 VIS             INOX
    002 BOULON M4
    002 BOULON      ACIER
    REQUETE :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT A.NOM, A.LIBELLE,
           CASE WHEN B.POS = '01' THEN B.LIBELLECO ELSE '' END,
           CASE WHEN B.POS = '02' THEN B.LIBELLECO ELSE '' END,
           CASE WHEN B.POS = '03' THEN B.LIBELLECO ELSE '' END
      FROM ARTICLE A,
           LIBELLECOM B
     WHERE A.NOM = B.NOM

    J'ai essayé avec un group by sur A.NOM, A.LIBELLE, B.POS, B.LIBELLECO mais cela ne marche pas comme je voudrais.

    Merci d'avance si vous pouvez m'aider à résoudre mon problème.

    Je précise que je suis sous iSeries AS400 ou MSQuery AS400.

    Cordialement

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Faites une recherche sur le mot PIVOT dans ce forum, vous devriez trouver votre solution.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 69
    Par défaut
    J'ai cherché dans ce sens mais après plusieurs essais, j'en suis toujours au meme point.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    En faisant une recherche sur PIVOT, je suis tombé sur une page complète avec une solution à votre problème dans chaque sujet.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 69
    Par défaut
    PARFAIT, J'ai trouvé la bonne solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT A.NOM, A.LIBELLE,
               MAX(CASE WHEN B.POS = '01' THEN B.LIBELLECO END),
               MAX(CASE WHEN B.POS = '02' THEN B.LIBELLECO END),
               MAX(CASE WHEN B.POS = '03' THEN B.LIBELLECO END)
     
    FROM ARTICLE A, LIBELLECOM B
    JOIN BY A.NOM = B.NOM
    GROUP BY A.NOM, A.LIBELLE
    Merci à toi Waldar car c'est une de tes solutions.

    Cdlt

    Vincent

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Bravo !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 07h41
  2. Problème count Join group by
    Par casa_sniper dans le forum PL/SQL
    Réponses: 5
    Dernier message: 08/12/2011, 12h21
  3. Problème left outer join et group by
    Par maya13400 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/09/2010, 20h40
  4. Problème INNER JOIN GROUP BY
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/05/2007, 16h18
  5. requete avec left join et group by
    Par slc dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/09/2004, 18h03

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