You may need to aggregate a column values for a given group of rows in a comma-separated string.
Lets say you have the following table:
DECLARE @tbl TABLE (JobId INT, TechSkills VARCHAR(100)) INSERT @tbl VALUES (1, '.Net Framework'), (1, 'C#'), (1, 'PHP'), (2, '.Net Core'), (2, 'Laravel'), (3, 'Angular'), (3, 'React')
In this table, we have 3 distinct JobIds with multiple technical skills. If we use simple select statement it will return multiple rows for each JobId.
select * from @tbl
You can use subquery with FOR XML PATH to aggregate multiple row values in a single cell value.
SELECT distinct
JobId,
(
SELECT ',' + TechSkills
FROM @tbl t2
WHERE t2.JobId = t1.JobId
FOR XML PATH('')
) Concatenated
FROM @tbl t1
In the output you may notice that each value contains an extra comma at the beginning of the text value.
You can use STUFF function to remove this extra comma at the beginning of text string.
SELECT distinct
JobId, STUFF(
(
SELECT ','+ TechSkills
FROM @tbl t2
WHERE t2.JobId = t1.JobId
FOR XML PATH('')
),1,2,'') Concatenated
FROM @tbl t1



No comments:
Post a Comment