Heh. Well I forgot to post the best version of the XML aggregator when I posted the other day. Then Ward Pond tagged in a post on it (here), and pointed out that I was "improving" on an old version that had been fixed by Adam Machanic among others...
Here is my "good" version that fixes the entitization problem:
SELECT (
SELECT n + ','
FROM (
SELECT 'a<b' AS n
UNION ALL
SELECT 'b>a'
UNION ALL
SELECT 'b&a'
UNION ALL
SELECT 'b
a') r
FOR XML PATH(''), TYPE
).value('.[1]','varchar(max)')
-- =====
And here is the version currenlty being used by Ward and company...:
;WITH ColumnToPivot ([data()]) AS (
SELECT p.ParentString + N', '
FROM Parent p
JOIN Child c
ON c.ParentId = p.ParentId
WHERE c.ChildId = 2
ORDER BY p.ParentId
FOR XML PATH(''), TYPE
),
XmlRawData (CSVString) AS (
SELECT (SELECT [data()] AS mydata FROM ColumnToPivot AS d FOR XML RAW, TYPE).value( '/row[1]/mydata[1]', 'NVARCHAR(max)') AS CSV_Column
)
SELECT LEFT(CSVString, LEN(CSVString)-1) AS CSVList
FROM XmlRawData
Finally, I heard yesterday that Adam is has a new challenge, involving, you guessed it, grouping concatenated strings. Guess I better get busy...