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 :

Vue avec regroupement de lignes et concaténation d'une colonne


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut Vue avec regroupement de lignes et concaténation d'une colonne
    Bonjour,

    Voilà mon schéma :

    J'ai une table A qui représente des livres et une table B qui représente des lecteurs. J'ai une 3ème table de lien entre les livres et les lecteurs, sachant qu'un livre peut être lu par plusieurs lecteurs et qu'un lecteur peut lire plusieurs livres.

    J'aimerais faire une vue basée sur les livres en ayant, dans une colonne la concaténation de tous les lecteurs associés

    Je n'ai aucune idée de comment faire ...
    Voici la vue que j'ai créé mais qui me renvoie pour chaque livre, autant de lignes qu'il n'y a de lecteurs
    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
    19
    20
    21
    22
    23
    24
    25
    CREATE VIEW LIVRES_ET_LECTEURS
    (
    TITRE,
    AUTEUR,
    DATE_PARUTION,
    NOM_PRENOM)
    AS SELECT
    TITRE,
    AUTEUR,
    DATE_PARUTION,
    NOM_PRENOM
    FROM (
    SELECT
    LIVRE.TITRE TITRE,
    LIVRE.AUTEUR AUTEUR,
    LIVRE.DATE_PARUTION DATE_PARUTION,
    LECT.NOM_PRENOM NOM_PRENOM
    FROM 
    LIVRE LIVRE,
    LIVRE_LECTEUR_LIEN LIEN,
    LECTEUR LECT
    WHERE
    LIVRE.ID = LIEN.LIVRE_ID AND
    LECT.ID = LIEN.LECTEUR_ID
    ) AS LIVRE_LECTEUR;
    Un grand merci pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Il n'y a pas de norme concernant le regroupement de chaines sur une seule ligne.
    La réponse dépend fortement du SGBD utilisé.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Merci pour ta réponse

    Le SGBD est SQL Server Express

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 4
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Je ne sais pas pour SQL Server, mais, je vais parler sur un plan plus abstrait sur deux points.
    Premièrement, je ne pense pas qu'une opération d'agrégation est définie sur les chaînes de caractères au niveau théorique (requêtes relationnelle dans l'algèbre relationnel) même en version étendue. Même si SQL Server permet d'une certain manière cette opération (d'où la requête sera de la forme, j'ai pas relu ton code, je lai fais un peu à la va-vite) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select TITRE, FonctionMagique(NOM)
    From LIVRE, LECTEUR, LIVRE_LECTEUR_LIEN
    Where LIVE.LIVRE_ID = LIVRE_LECTEUR_LIEN.ID_LIVRE 
    and LIVRE_LECTEUR_LIEN.ID_LECTEUR = LECTEUR.ID_LECTEUR
    Group By TITRE;
    Comme vous voyez, cette "FonctionMagique" n'existera que sous SQL Server. Si vous changez le SGBD, vous allez être obligé à revoir les différentes requêtes.
    Le deuxième point concerne la création des vues. Le fait qu'il s'agit d'une vue alors certainement vous avez une partie application qui va imprimer ou afficher ces informations. Vous pouvez laisser la partie de concaténation pour l'application et ainsi vous allez pouvoir écrire une requête très simple et qui fonctionnera sur tous (ou presque) les SGBD. C'est juste une proposition.

    Bon Courage.

  5. #5
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    À partir d'SQL Server 2017 il y a la fonction STRING_AGG().

    Sinon il y a des méthodes alternatives, exemple: https://stackoverflow.com/questions/...g-in-sqlserver

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    la syntaxe :
    STRING_AGG ( expression, separator ) WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
    (MS SQL Server)
    serait en voie de normalisation, pour la prochaine édition du SQL standardisé

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Merci à tous

    La fonction string_agg fait exctament ce qu'il me faut

    Merci pour votre aide

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

Discussions similaires

  1. Concaténer en ligne les données d'une colonne
    Par philben dans le forum Contribuez
    Réponses: 2
    Dernier message: 16/02/2015, 12h23
  2. [XL-2010] Concaténer toute une colonne Excel vers une ligne Word
    Par elwy07 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 13/02/2015, 19h38
  3. Réponses: 5
    Dernier message: 02/04/2010, 15h59
  4. Réponses: 8
    Dernier message: 04/07/2007, 14h33
  5. Concaténer des lignes d'enregistrements dans une colonne
    Par dany13 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 08/07/2005, 21h56

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