2011-11-11 6 views
-1

Possible en double:
Combine multiple results in a subquery into a single comma-separated valuerequête SQL Server par des virgules retour des valeurs séparées

j'ai une requête qui retourne un objet personne et doit revenir également une colonne d'organisations qui contient séparées par une virgule liste des organisations. Ma requête en cours est ci-dessous:

SELECT 
p.PersonID, 
p.Title, 
p.FirstName, 
p.LastName, 
p.DateOfBirth, 
p.EmailAddress, 
p.MobileNumber, 
p.EntityID, 
(SELECT o.Name FROM Entities.Organisations o 
    JOIN Entities.OrganisationPeople op ON o.OrganisationID = op.OrganisationID  AND op.PersonID = p.PersonID) AS 'Organisations' 
    FROM 
Entities.People p 

Cela est bien quand il y a une organisation attachée à une personne, mais je pourrais tout aussi bien faire une norme rejoindre. Je souhaite renvoyer éventuellement plus d'un résultat dans la colonne des organisations avec une liste séparée par des virgules.

Est-ce même possible?

+0

Il y a aussi quelques idées à l'adresse http: //stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-ms-sql-server-2005 –

+0

Et http://stackoverflow.com/questions/2046037/sql-server-can-i-comma-delimit-multiple-rows-into-one-column –

Répondre

0

De here, voici un exemple:

1. Créer l'UDF

CREATE FUNCTION CombineValues 
(
@F_ID INT --The foreign key from TableA which is used to fetch corresponding records 
) 
RETURNS VARCHAR(8000) 
AS 
BEGIN 
DECLARE @SomeColumnList VARCHAR(8000); 

SELECT @SomeColumnList = COALESCE(@SomeColumnList + ', ', '') + CAST(SomeColumn AS varchar(20)) 
FROM TableB C 
WHERE C.FK_ID = @FK_ID; 

RETURN 
(
SELECT @SomeColumnList 
) 
END 

2. Utilisation dans sous_requête

SELECT ID, Name, dbo.CombineValues(FK_ID) FROM TableA 
Questions connexes