I have to fiddle around a little, but here it is!DECLARE @Sample TABLE (ID INT, Name VARCHAR(9))INSERT @SampleSELECT 3, 'Car' UNION ALLSELECT 1, 'Lion' UNION ALLSELECT 1, 'Rat' UNION ALLSELECT 1, 'Mouse' UNION ALLSELECT 2, 'Apple' UNION ALLSELECT 2, 'Orange'-- Show the expected outputSELECT DISTINCT s1.ID, STUFF( ( SELECT CASE WHEN Item = 1 AND Items > 1 THEN ' and ' ELSE ', ' END + s2.Name FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY s2.ID ORDER BY s2.Name DESC) AS Item, COUNT(*) OVER (PARTITION BY s2.ID) AS Items, s2.Name FROM @Sample AS s2 WHERE s2.ID = s1.ID ) AS s2 ORDER BY Item DESC FOR XML PATH('') ), 1, 2, '') AS ItemsFROM @Sample AS s1ORDER BY s1.ID
E 12°55'05.25"N 56°04'39.16"