SELECT agenda.AgendaItemNumber,
Agenda.AgendaName,
AgendaType.AgendaTypeDescription,
STUFF(( SELECT ';' + FullName
FROM UserDetails
WHERE UserDetails.AgendaID = Agenda.AgendaID
FOR XML PATH('')
), 1, 1, '') AS fullName
FROM Agenda
INNER JOIN AgendaType
ON AgendaType.AgendaTypeID=Agenda.AgendaTypeID
INNER JOIN UserDetails
ON Agenda.AgendaID = Userdetails.AgendaID
WHERE agenda.AgendaTypeID = '2'
AND AgendaItemNumber = AgendaItemNumber
AND AgendaName = AgendaName
AND AgendaTypeDescription = AgendaTypeDescription
AND AgendaItemNumber >= '3'
ADENDUM
L'extension XML dans SQL-Server vous permet de concaténer plusieurs lignes en une seule ligne. L'intention réelle de l'extension est de pouvoir sortir en XML (évidemment), mais il existe quelques astuces astucieuses qui sont des sous-produits des extensions. Dans la requête ci-dessus, s'il y avait un nom de colonne dans la sous-requête (FullName), le résultat serait <FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName>
, car il n'y a pas de nom de colonne, il concatène simplement les lignes (ne formant pas le code XML approprié). Le PATH
part vous permet de spécifier un nœud supplémentaire, par exemple si vous utilisez PATH('Name') dans ce qui précède, vous obtiendrez <Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name>
Si vous combinez Path avec un nom de colonne, vous obtiendrez Joe Bloggs.
Enfin le STUFF
supprime simplement le point-virgule au début de la liste.