ich die folgende Abfrage schrieb ein Basisdatensatz mit einem allgemeinen Tabellenausdruck zu bauen und dann eine Gruppierung/Konkatenierungsoperation die Ergebnisse, die ich Sie denken, zu bekommen hier bist:
WITH temp AS (
SELECT CAST('1/1/2009' AS DATETIME) AS Date, 'Training 1' AS Session, 'Mike' AS Participant
UNION ALL
SELECT CAST('1/1/2009' AS DATETIME) AS Date, 'Training 1' AS Session, 'Bill' AS Participant
UNION ALL
SELECT CAST('1/1/2009' AS DATETIME) AS Date, 'Training 1' AS Session, 'Steve' AS Participant
UNION ALL
SELECT CAST('1/2/2009' AS DATETIME) AS Date, 'Training 2' AS Session, 'Steve' AS Participant
UNION ALL
SELECT CAST('1/2/2009' AS DATETIME) AS Date, 'Training 2' AS Session, 'Bill' AS Participant
UNION ALL
SELECT CAST('1/3/2009' AS DATETIME) AS Date, 'Training 3' AS Session, 'Mike' AS Participant
)
SELECT DISTINCT
Date,
Session,
(
SELECT STUFF(
(
SELECT
',' + CAST(Participant AS NVARCHAR(50)) + '' AS [text()]
FROM
temp b
WHERE
b.Date = a.Date AND
b.Session = a.Session
FOR
XML PATH('')
),
1,
1,
''
)
) AS Participants
FROM
temp a
Dies gibt der folgende:
Date Session Participants
2009-01-01 00:00:00.000 Training 1 Mike,Bill,Steve
2009-01-02 00:00:00.000 Training 2 Steve,Bill
2009-01-03 00:00:00.000 Training 3 Mike
Sie können diese Ergebnisse wie gewünscht in SSRS formatieren. Es gibt keine Versprechungen, dass dies aufgrund der DISTINCT-Klausel bei einem sehr großen Dataset schnell ausgeführt wird, aber jede Gruppierungsoperation, die Sie für ein großes Dataset ausführen, wäre ohnehin langsam. Die Verwendung der FOR XML-Klausel, wie diese, gilt absolut, wenn es um die Verkettung geht.
Hoffe, das hilft.
könnten Sie String.Replace ("", ",") verwenden, um dies zu umgehen –