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

Développement SQL Server Discussion :

Regrouper plusieurs lignes en une seule


Sujet :

Développement SQL Server

  1. #1
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut Regrouper plusieurs lignes en une seule
    Bonjour,

    J'ai dans ma base 3 tables:

    ARTICLE
    - Code (clé)
    - CC (clé)
    - Lib1
    - Lib2

    NOMENC
    - Code (clé)
    - CC (clé)
    - COMP
    - COMP_CC
    - LIB_COMP

    LIBELLE
    - Code (clé)
    - CC (clé)
    - LIBEL_COMPL

    Pour un article d'ARTICLE,, je peux avoir plusieurs lignes dans LIBELLE et plusieurs lignes dans NOMENC

    Via une seule requête, je voudrais pouvoir avoir concaténé dans une même ligne:
    ARTICLE.CODE, ARTICLE.CC, NOMENC.COMP1, NOMENC.COMP_CC1, NOMENC.LIB_COMP1, NOMENC.COMP2, NOMENC.COMP_CC2, NOMENC.LIB_COMP2, ..., LIBELLE.LIBEL_COMPL1, LIBELLE.LIBEL_COMPL2...

    Est-ce réalisable? J'ai cherché du côté de XML PATH, GROUP_CONCAT, mais sans succès.

    Merci d'avance,
    Xavier

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

    essayez STRING_AGG(), GROUP_CONCATc'est pour MySQL

  3. #3
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Bonjour,

    STRING_AGG() n'est pas reconnu
    Xavier

  4. #4
    Invité
    Invité(e)
    Par défaut
    ça serait bien de fournir ta version de sql server alors


  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    @7gyY9w1ZY6ySRgPeaefZ, la release majeure est spécifiée dans le sujet

    @Asdorve, jetez un coup d'œil à FOR XML PATH, ça fonctionne sur SQL-Server 2008.

  6. #6
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par Waldar Voir le message

    @Asdorve, jetez un coup d'œil à FOR XML PATH, ça fonctionne sur SQL-Server 2008.
    Je l'ai fait, mais sans succès
    Xavier

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je n'avais pas bien lu votre besoin, vous cherchez un PIVOT plutôt non ?
    N'hésitez pas à fournir quelques lignes de vos tables pour illustrer.

  8. #8
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    ARTICLE
    - Code (clé) : AAAA
    - CC (clé) : 1234
    - Lib1 : Ma description 1
    - Lib2 : Ma description 2

    NOMENC
    - Code (clé) : AAAA
    - CC (clé) : 1234
    - COMP : COMPOSANT1
    - LIB_COMP : Description Composant 1

    - Code (clé) : AAAA
    - CC (clé) : 1234
    - COMP : COMPOSANT2
    - LIB_COMP : Description Composant 2

    LIBELLE
    - Code (clé) : COMPOSANT1
    - LIBEL_COMPL : dispo en stock

    - Code (clé) : COMPOSANT2
    - LIBEL_COMPL : existe en rouge uniquement

    Pour obtenir :
    AAAA, 1234, Ma description 1, Ma description 2, COMPOSANT1, dispo en stock, COMPOSANT2, existe uniquement en rouge
    Xavier

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez ainsi :
    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
    with cte_NOMENC (Code, CC, COMP, LIB_COMP, rn) as
    (
    select Code, CC, COMP, LIB_COMP
         , row_number() over(partition by Code, CC order by COMP asc)
      from NOMENC
    )
      select art.Code, art.CC, art.Lib1, art.Lib2
           , max(case nom.rn when 1 then nom.COMP        end) as COMP_1
           , max(case nom.rn when 1 then lib.LIBEL_COMPL end) as LIB_1
           , max(case nom.rn when 2 then nom.COMP        end) as COMP_2
           , max(case nom.rn when 2 then lib.LIBEL_COMPL end) as LIB_2
        from ARTICLE    as art
        join cte_NOMENC as nom  on nom.Code = art.Code
                               and nom.CC   = art.CC
        join LIBELLE    as lib  on lib.Code = nom.COMP
    group by art.Code, art.CC, art.Lib1, art.Lib2;

Discussions similaires

  1. Regrouper plusieurs lignes en une seule
    Par timso dans le forum Informix
    Réponses: 6
    Dernier message: 12/07/2018, 15h10
  2. Regrouper plusieurs lignes dans une seule
    Par djinpark1 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2013, 13h26
  3. [AC-2003] Regrouper plusieurs lignes en une seule
    Par DeFCrew dans le forum IHM
    Réponses: 2
    Dernier message: 20/12/2010, 16h19
  4. Regrouper plusieurs lignes en une seule
    Par Nicolerst dans le forum Développement
    Réponses: 2
    Dernier message: 18/08/2010, 10h50
  5. Regrouper plusieurs lignes sur une seule
    Par Mygush dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/09/2009, 11h05

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