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

MS SQL Server Discussion :

Mettre plusieurs valeurs d'une colonne dans un champ


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Par défaut Mettre plusieurs valeurs d'une colonne dans un champ
    Bonjour

    Je souhaite créer une table à 2 colonnes en insérant dans la 2ème colonne la concaténation avec une retour charriot de plusieurs valeurs.
    Voici ma table pour que cela soit plus explicite.

    MedecinParPatient:
    Id_patient | Medecin
    __________|___________
    -----1----- | Dupond
    __________|___________
    -----1----- | Pierre
    __________|__________
    -----1----- | Renée
    __________|__________
    -----2----- | Pierre
    __________|__________
    -----3----- | Renaud
    __________|__________
    -----3----- | Andrée
    __________|__________
    etc.......
    __________|__________


    Et je souhaiterais avoir cela:

    MedecinParPatient:
    Id_patient | Medecin
    _____________________
    -----1----- | Dupond
    ----------- | Pierre
    ----------- | Renée
    __________ |________
    -----2----- | Pierre
    ___________|________
    -----3----- | Renaud
    ----------- |Andrée
    ___________|________
    etc.......
    ___________|________

    Si quelqu’un à la solution

  2. #2
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Vous allez vous attirer les foudres d'une grande partie des développeurs de ce forum....
    Vous ne devez jamais stocker plusieurs valeurs, surtout séparées par un retour chariot dans une même colonne d'une ligne !

    Par contre vous pouvez définir une table de référence qui va contenir 2 colonnes (IdPatient, IdMedecin) et qui répètera l'IdPatient autant de fois que vous allez insérer de IdMedecin différents.

  3. #3
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Par défaut
    Je m'en doute que cela n'est pas une chose a faire
    Cela est pour un exercice donc je me vois pas dire à mon tuteur "Non c'est pô bien"

    La table de référence est déjà créer (c'est celle que je vous montre en exemple) avec pour chaque patient le nom du médecin consulter (un par ligne). A la base cela provient de trois table différentes (Patients,Prescription,Medecin)

  4. #4
    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 : 44
    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
    Par défaut
    Bonjour,

    En effet l'approche est fausse, puisqu'elle ne respecte pas la première forme normale, qui indique que toute valeur stockée dans une colonne doit être atomique.
    Ce que vous cherchez à faire, c'est de la présentation, et ça ne se fait pas en bases de données.
    Donc oui, votre tuteur se trompe.
    Votre table MedecinParPatient doit effectivement avoir deux colonnes, puisque c'est une relation n à n :

    - un patient peut avoir plusieurs médecins
    - un médecin traite plusieurs patients.

    Donc l'une des deux colonnes doit être l'identifiant du médecin, et l'autre l’identifiant du patient, et en aucun cas leur(s) nom(s).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT		P.nom AS patient_nom
    		, MC.medecin_nom_concat
    FROM		dbo.MedecinParPatient AS MPP
    INNER JOIN	dbo.Patient AS P
    			ON P.patient_id = MPP.patient_id
    CROSS APPLY	(
    			SELECT	M.medecin_nom + ','
    			FROM	dbo.Medecin AS M
    			WHERE	M.medecin_id = MPP.medecin_id
    			FOR	XML PATH ('')
    		) AS MC (medecin_nom_concat)
    Faites une vue dont la définition est la requête ci-dessous, ou une procédure stockée qui exécute cette requête.

    @++

  5. #5
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Par défaut
    Merci de votre réponse.
    Je m'étais mal formuler excuser moi, c'est bien de la présentation que je souhaite faire et non une création de table

    J'ai tester votre code et celui-ci ne fonctionne pas
    " syntaxe incorrecte vers 'APPLY'."
    "Syntaxe incorrecte vers le mot clé 'FOR'."

    Pour info je suis sous SQL Server 2000

  6. #6
    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 : 44
    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
    Par défaut
    J'ai tester votre code et celui-ci ne fonctionne pas
    " syntaxe incorrecte vers 'APPLY'."
    "Syntaxe incorrecte vers le mot clé 'FOR'."

    Pour info je suis sous SQL Server 2000
    Ceci explique cela

    Remplacez par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT		P.nom AS patient_nom
    		, (
    			SELECT	M.medecin_nom + ','
    			FROM	dbo.Medecin AS M
    			WHERE	M.medecin_id = MPP.medecin_id
    			FOR	XML PATH ('')
    		) AS medecin_nom_concat
    FROM		dbo.MedecinParPatient AS MPP
    INNER JOIN	dbo.Patient AS P
    			ON P.patient_id = MPP.patient_id
    @++

  7. #7
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Par défaut
    Merci

    le ne fonctionne toujours pas mais ce n'est pas grave

    Encore Merci

  8. #8
    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 : 44
    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
    Par défaut
    Désolé, je pensais que c'était pris en compte par SQL Server 2000 ... trop longtemps que je n'y ai pas touché

    mais ce n'est pas grave
    Avez-vous trouvé une solution ? Si c'est le cas, partagez la !

    @++

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

Discussions similaires

  1. [VBA] Somme de certaines valeurs d'une colonne dans une requete
    Par petitelalou dans le forum VBA Access
    Réponses: 7
    Dernier message: 01/08/2007, 00h18
  2. Copier les valeurs d'une colonne dans une autre
    Par hochimi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2007, 13h14
  3. [TP 7] Comment mettre plusieurs valeurs en une ?
    Par Qawox dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 15/07/2006, 02h38
  4. Réponses: 2
    Dernier message: 08/06/2006, 13h48
  5. Mettre la valeur d'une table dans une CString
    Par Lucier dans le forum MFC
    Réponses: 29
    Dernier message: 26/11/2004, 16h04

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