Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2011, 11h47   #1
Invité de passage
 
Inscription : août 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 6
Points : 2
Points : 2
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
ljleyoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 12h19   #2
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
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.
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/09/2011, 12h30   #3
Invité de passage
 
Inscription : août 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 6
Points : 2
Points : 2
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)
ljleyoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 16h03   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
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 :
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.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 18h12   #5
Invité de passage
 
Inscription : août 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 6
Points : 2
Points : 2
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
ljleyoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 01h54   #6
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Citation:
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 :
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
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 09h24   #7
Invité de passage
 
Inscription : août 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 6
Points : 2
Points : 2
Merci

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

Encore Merci
ljleyoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 03h16   #8
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Désolé, je pensais que c'était pris en compte par SQL Server 2000 ... trop longtemps que je n'y ai pas touché

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

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h46.


 
 
 
 
Partenaires

Hébergement Web