Ich brauche eine Liste aller Aktivitäten in unserem System. Eine Aktivität kann 1: viele Dienstanbieter haben, die die Aktivität verwalten - also habe ich eine Tabelle "Attraktivität" mit einer Verknüpfungstabelle für viele bis viele (ActivityServiceProvider) und eine Liste von Dienstanbietern.Mehrere Zeilen in eine Zeile, wenn es eine Gruppe gibt
Eine Abfrage zum Abrufen der Daten sieht so aus.
SELECT a.id, sp.Description
FROM Activity a
INNER JOIN dbo.ActivityServiceProvider asp
ON asp.ActivityID = a.ID
INNER JOIN dbo.ServiceProvider sp
ON sp.ID = asp.ServiceProviderID
Aber wie könnte es pro Aktivität mehr als ein Service-Provider sein, muss ich irgendwie STUFF verwenden, um die Liste der Service-Provider in einer einzigen Zeile Spalte zu erhalten.
Ich versuchte dies, aber es ist mit jsut eine einzelne Zeile andernfalls zurückgegeben wird:
SELECT
STUFF((
SELECT a.ID, ', ' + MAX(sp.Description)
FROM Activity a
INNER JOIN dbo.ActivityServiceProvider asp
ON asp.ActivityID = a.ID
INNER JOIN dbo.ServiceProvider sp
ON sp.ID = asp.ServiceProviderID
GROUP BY a.ID
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS NameValues
Kann jemand das Problem vor Ort? Das Schlüsselwort "STUFF" und das Schlüsselwort "FOR XML" verwirren mich, sodass ich möglicherweise einen Basisfehler erstelle, aber ich versuche, eine ActivityID und eine ServiceProviders-Spalte mit einer kommagetrennten Liste von Dienstanbietern zurückzugeben.
Danke - das hat funktioniert. Ich muss herausfinden, warum, aber - wow. Vielen Dank. – Craig