Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

par quel bout prendre ma requête ?

5 réponses
Avatar
olivier
Bonjour,

Je ne sais pas par quel bout prendre ma requête ?

Soit deux tables :

------------------------------------------------------------------------------
SEANCES
seance_ID INT primary
seance_Date DATETIME
seance_patient_id INT

------------------------------------------------------------------------------
DETAILS_SEANCES
details_seances_id INT primary
seance_id INT
medecin_id INT


pour un enregistrement de la table SEANCES, il peut y avoir plusieurs
enregistrements dans la table DETAILS_SEANCES

Exemple :

--SEANCES
seance_ID seance_Date seance_patient_id
1 01/01/2010 1000
2 02/01/2010 1500

--DETAILS_SEANCES
details_seances_id seance_id medecin_id
1 1 2
2 2 6
3 2 8
4 2 9

ici la séance du 02/01/2010 pour le patient n° 1500 a été réalisé avec les
trois médecins (n° 6, 8, 9)

en résultat de requête , je souhaiterai avoir une seule ligne comme ceci :

seance_ID seance_Date seance_patient_id medecins
2 02/01/2010 1500
6, 8, 9

J'espère est assez clair dans mes explications

Merci

5 réponses

Avatar
Sylvain Lafontaine
Commencez par ici: http://www.projectdmx.com/tsql/rowconcatenate.aspx

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Blogue/site web: http://paparazzi-codeur.sylvainlafontaine.com
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"olivier" wrote in message
news:%
Bonjour,

Je ne sais pas par quel bout prendre ma requête ?

Soit deux tables :

------------------------------------------------------------------------------
SEANCES
seance_ID INT primary
seance_Date DATETIME
seance_patient_id INT

------------------------------------------------------------------------------
DETAILS_SEANCES
details_seances_id INT primary
seance_id INT
medecin_id INT


pour un enregistrement de la table SEANCES, il peut y avoir plusieurs
enregistrements dans la table DETAILS_SEANCES

Exemple :

--SEANCES
seance_ID seance_Date seance_patient_id
1 01/01/2010 1000
2 02/01/2010 1500

--DETAILS_SEANCES
details_seances_id seance_id medecin_id
1 1 2
2 2 6
3 2 8
4 2 9

ici la séance du 02/01/2010 pour le patient n° 1500 a été réalisé avec les
trois médecins (n° 6, 8, 9)

en résultat de requête , je souhaiterai avoir une seule ligne comme ceci
:

seance_ID seance_Date seance_patient_id medecins
2 02/01/2010 1500 6, 8, 9

J'espère est assez clair dans mes explications

Merci





Avatar
Fred BROUARD
Il s'agit de cosmétique. Ceci n'est pas à faire sur un serveur SQL, mais
dans le code client. A lire sur le sujet :
http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

éanmoins si vous voulez faire cela à l'aide d'une seule requête, le plus
simple est de le faire via une CTE récursive comme je l'ai montré ici :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D

A +


olivier a écrit :
Bonjour,

Je ne sais pas par quel bout prendre ma requête ?

Soit deux tables :

------------------------------------------------------------------------------
SEANCES
seance_ID INT primary
seance_Date DATETIME
seance_patient_id INT

------------------------------------------------------------------------------
DETAILS_SEANCES
details_seances_id INT primary
seance_id INT
medecin_id INT


pour un enregistrement de la table SEANCES, il peut y avoir plusieurs
enregistrements dans la table DETAILS_SEANCES

Exemple :

--SEANCES
seance_ID seance_Date seance_patient_id
1 01/01/2010 1000
2 02/01/2010 1500

--DETAILS_SEANCES
details_seances_id seance_id medecin_id
1 1 2
2 2 6
3 2 8
4 2 9

ici la séance du 02/01/2010 pour le patient n° 1500 a été réalisé avec les
trois médecins (n° 6, 8, 9)

en résultat de requête , je souhaiterai avoir une seule ligne comme ceci :

seance_ID seance_Date seance_patient_id medecins
2 02/01/2010 1500
6, 8, 9

J'espère est assez clair dans mes explications

Merci







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Avatar
Fred BROUARD
Il s'agit de cosmétique. Ceci n'est pas à faire sur un serveur SQL, mais
dans le code client. A lire sur le sujet :
http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

Néanmoins si vous voulez faire cela à l'aide d'une seule requête, le
plus simple est de le faire via une CTE récursive comme je l'ai montré
ici :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D

A +


olivier a écrit :
Bonjour,

Je ne sais pas par quel bout prendre ma requête ?

Soit deux tables :

------------------------------------------------------------------------------
SEANCES
seance_ID INT primary
seance_Date DATETIME
seance_patient_id INT

------------------------------------------------------------------------------
DETAILS_SEANCES
details_seances_id INT primary
seance_id INT
medecin_id INT


pour un enregistrement de la table SEANCES, il peut y avoir plusieurs
enregistrements dans la table DETAILS_SEANCES

Exemple :

--SEANCES
seance_ID seance_Date seance_patient_id
1 01/01/2010 1000
2 02/01/2010 1500

--DETAILS_SEANCES
details_seances_id seance_id medecin_id
1 1 2
2 2 6
3 2 8
4 2 9

ici la séance du 02/01/2010 pour le patient n° 1500 a été réalisé avec les
trois médecins (n° 6, 8, 9)

en résultat de requête , je souhaiterai avoir une seule ligne comme ceci :

seance_ID seance_Date seance_patient_id medecins
2 02/01/2010 1500
6, 8, 9

J'espère est assez clair dans mes explications

Merci







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Avatar
olivier
>>> Il s'agit de cosmétique. Ceci n'est pas à faire sur un serveur SQL







oui je suis d'accord. (comme tu l'as ecrit dans ton bouquin :-)
mais c'est quand meme vachement plus rapide par SQL que par le code client
:-(

merci



"Fred BROUARD" a écrit dans le message de news:

Il s'agit de cosmétique. Ceci n'est pas à faire sur un serveur SQL, mais
dans le code client. A lire sur le sujet :
http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

éanmoins si vous voulez faire cela à l'aide d'une seule requête, le plus
simple est de le faire via une CTE récursive comme je l'ai montré ici :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D

A +


olivier a écrit :
Bonjour,

Je ne sais pas par quel bout prendre ma requête ?

Soit deux tables :

------------------------------------------------------------------------------
SEANCES
seance_ID INT primary
seance_Date DATETIME
seance_patient_id INT

------------------------------------------------------------------------------
DETAILS_SEANCES
details_seances_id INT primary
seance_id INT
medecin_id INT


pour un enregistrement de la table SEANCES, il peut y avoir plusieurs
enregistrements dans la table DETAILS_SEANCES

Exemple :

--SEANCES
seance_ID seance_Date seance_patient_id
1 01/01/2010 1000
2 02/01/2010 1500

--DETAILS_SEANCES
details_seances_id seance_id medecin_id
1 1 2
2 2 6
3 2 8
4 2 9

ici la séance du 02/01/2010 pour le patient n° 1500 a été réalisé avec
les trois médecins (n° 6, 8, 9)

en résultat de requête , je souhaiterai avoir une seule ligne comme ceci
:

seance_ID seance_Date seance_patient_id medecins
2 02/01/2010 1500 6, 8, 9

J'espère est assez clair dans mes explications

Merci







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************


Avatar
olivier
j'ai trouvé:
http://johnnycoder.com/blog/2006/09/05/concatenate-multiple-rows-into-a-single-string/

Scalar UDF with variable concatenation in SELECT
CREATE FUNCTION udf_update_concat (@jobid INT) RETURNS VARCHAR(MAX) AS

BEGIN

DECLARE @t TABLE(p VARCHAR(40))
DECLARE @r VARCHAR(MAX)
SET @r = SPACE(0)

INSERT @t ( p )
SELECT Emp_name FROM Employee WHERE Job_ID = @jobid

IF @@ROWCOUNT > 0
UPDATE @t

SET @r = @r + p + ','
RETURN(@r)
END


--Here is how to use this function:

SELECT Job_ID, dbo.udf_update_concat(Job_ID)
FROM Employee
GROUP BY Job_ID








"olivier" a écrit dans le message de news:
%
Bonjour,

Je ne sais pas par quel bout prendre ma requête ?

Soit deux tables :

------------------------------------------------------------------------------
SEANCES
seance_ID INT primary
seance_Date DATETIME
seance_patient_id INT

------------------------------------------------------------------------------
DETAILS_SEANCES
details_seances_id INT primary
seance_id INT
medecin_id INT


pour un enregistrement de la table SEANCES, il peut y avoir plusieurs
enregistrements dans la table DETAILS_SEANCES

Exemple :

--SEANCES
seance_ID seance_Date seance_patient_id
1 01/01/2010 1000
2 02/01/2010 1500

--DETAILS_SEANCES
details_seances_id seance_id medecin_id
1 1 2
2 2 6
3 2 8
4 2 9

ici la séance du 02/01/2010 pour le patient n° 1500 a été réalisé avec les
trois médecins (n° 6, 8, 9)

en résultat de requête , je souhaiterai avoir une seule ligne comme ceci
:

seance_ID seance_Date seance_patient_id medecins
2 02/01/2010 1500 6, 8, 9

J'espère est assez clair dans mes explications

Merci