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 les informations d'un contact dans une même cellule d'un tableau


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Points : 32
    Points
    32
    Par défaut regrouper les informations d'un contact dans une même cellule d'un tableau
    Bonjour,
    Je suis totalement novice avec le language SQL.

    Je souhaite regrouper les informations d'un contact dans une même cellule d'un tableau

    J'ai deux tables :
    1- Table contact
    [IDmembre] [NomContact]

    2- Table Club
    [IDClub] [NomClub] [IDmembre]

    Je souhaite obtenir le résultat suivant :

    [NomContact] [NomClub, NomClub]*
    * dans le cas où un contact fait parti de plusieurs clubs.

    POUR EXEMPLE:
    Voici le contenu des la table :
    [Toto] [Club A]
    [Toto] [Club B]
    [Titi] [Club B]

    Je souhaite obtenir le réultat :

    [Toto] [Club A ; Club B]
    [Titi] [Club B]

    Merci pour votre aide précieuse

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Salut,
    Quel est ton sgbd? selon les sgbd, il existe des solution toutes faites, ou non.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    En plus ce que tu demandes est de la cosmétique et n'est normalement pas le boulot d'un SGBD. C'est celui du logiciel utilisateur et donc du langage qui récupère les données pour les afficher correctement.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Points : 32
    Points
    32
    Par défaut SGBD : SQL Server - BO
    SGBD : SQL Server hébergé par un prestataire.

    J'utilise Deski de BO pour extraire les données.
    J'ai dépose le post sur le forum BO mais personne ne veut me répondre.

    De plus, je pense qu'il faut créer un objet dans BO qui repose sur une requête SQL (exemple : Select ...).
    Mais là, je sèche.

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Nous pouvons vous donner une solution, mais celle-ci dépend de la version de SQL Server sous laquelle vous travaillez.
    Si vous ne la connaissez pas, exécutez

    @++

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    SQLServer 2005

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Voici :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    CREATE TABLE Contact
    (
    	IDmembre INT IDENTITY CONSTRAINT PK_Contact PRIMARY KEY,
    	NomContact VARCHAR(20) NOT NULL
    )
    GO
     
    CREATE TABLE Club
    (
    	IDClub INT IDENTITY  CONSTRAINT PK_Club PRIMARY KEY,
    	NomClub VARCHAR(20) NOT NULL,
    	IDmembre INT CONSTRAINT FK_Club_IDmembre FOREIGN KEY (IDmembre) REFERENCES Contact (IDmembre)
    )
    GO
     
    INSERT INTO dbo.Contact (NomContact) VALUES('BipBipBO')
    INSERT INTO dbo.Contact (NomContact) VALUES('ElSuket')
    GO
     
    INSERT INTO dbo.Club (NomClub, IDmembre) VALUES ('SQLServer', 1)
    INSERT INTO dbo.Club (NomClub, IDmembre) VALUES ('SQLServer', 2)
    INSERT INTO dbo.Club (NomClub, IDmembre) VALUES ('C#', 2)
    GO
     
    WITH
    	CTE_LISTE_BRUTE(IDmembre, NomContact, NomClub, Indice) AS
    	(
    		SELECT CONTACT.IDmembre,
    				CONTACT.NomContact,
    				CLUB.NomClub,
    				ROW_NUMBER() OVER(PARTITION BY CONTACT.IDmembre ORDER BY CONTACT.IDmembre) AS Indice
    		FROM dbo.Contact CONTACT
    		JOIN dbo.Club CLUB ON CLUB.IDmembre = CONTACT.IDmembre
    	),
    	CTE_LISTE_CLUB(IDmembre, NomContact, ListeClub, Compteur) AS
    	(
    			SELECT IDmembre,
    					NomContact,
    					CAST(NomClub AS VARCHAR(8000)) AS ListeClub,
    					1 AS Compteur
    			FROM CTE_LISTE_BRUTE
    			WHERE Indice = 1
    		UNION ALL
    			SELECT CTE_LISTE_CLUB.IDmembre,
    					CTE_LISTE_CLUB.NomContact,
    					CAST(CTE_LISTE_CLUB.ListeClub + ', ' + CTE_LISTE_BRUTE.NomClub AS VARCHAR(8000)) AS ListeClub,
    					CTE_LISTE_CLUB.Compteur + 1
    			FROM CTE_LISTE_CLUB
    			JOIN CTE_LISTE_BRUTE ON CTE_LISTE_CLUB.IDmembre = CTE_LISTE_BRUTE.IDmembre
    			WHERE Indice = Compteur + 1
    	),
    	CTE_MAX(IDmembre, maxCompteur) AS
    	(
    		SELECT IDmembre,
    				MAX(Compteur) AS maxCompteur
    		FROM CTE_LISTE_CLUB
    		GROUP BY IDmembre
    	)
    SELECT CTE_LISTE_CLUB.NomContact, CTE_LISTE_CLUB.ListeClub
    FROM CTE_LISTE_CLUB
    JOIN CTE_MAX
    	ON CTE_LISTE_CLUB.Compteur = CTE_MAX.maxCompteur
    	AND CTE_LISTE_CLUB.IDmembre = CTE_MAX.IDmembre
    Néanmoins je trouve que votre conception est mauvaise : IDmembre n'a rien à faire dans la table CLUB, parce qu'un CLUB n'est pas défini par ses membres.
    J'aurais plutôt vu :

    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
    CREATE TABLE Contact
    (
    	IDContact INT IDENTITY CONSTRAINT PK_Contact PRIMARY KEY,
    	NomContact VARCHAR(20) NOT NULL,
    	PrenomContact VARCHAR(20) NOT NULL
    )
    GO
     
    CREATE TABLE Club
    (
    	IDClub INT IDENTITY CONSTRAINT PK_Club PRIMARY KEY,
    	NomClub VARCHAR(20) NOT NULL
    )
    GO
     
    CREATE TABLE Membre
    (
    	IDMembre INT IDENTITY CONSTRAINT PK_Membre PRIMARY KEY,
    	IDContact INT NOT NULL CONSTRAINT FK_Membre_IDContact FOREIGN KEY(IDContact) REFERENCES Contact(IDContact),
    	IDClub INT NOT NULL CONSTRAINT FK_Membre_IDClub FOREIGN KEY(IDClub) REFERENCES Club(IDClub),
    	CONSTRAINT UQ_Membre_IDContact_IDClub UNIQUE (IDContact, IDClub)
    )
    GO
    Rappelez-vous que les bases de données relationnelles sont faites d'entités, mais aussi et surtout de ... relations

    @++

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    Merci pour l'information.

    Maintenant, il faut que je m'inscrive à une formation sur le langage SQL.

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

Discussions similaires

  1. [Débutant] comment conserver les informations d'un utilisateur dans une variable?
    Par beaudelaire dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/12/2011, 06h31
  2. Regrouper les données de plusieurs feuilles dans une
    Par djinero dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/10/2011, 23h47
  3. [MySQL] comment insérer les informations d'un formulaire dans une table
    Par eljed dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/05/2011, 12h01
  4. [Lazarus] [Ubuntu] Regrouper les fenêtres de l'EDI dans une seule
    Par Sephiroth Lune dans le forum Lazarus
    Réponses: 0
    Dernier message: 11/07/2008, 14h36
  5. Réponses: 10
    Dernier message: 19/09/2005, 22h24

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