I need to create a comma delimited list of values for each group id in a table and fill in any missing values but I’m not quite sure how to proceed. I’m using Server 2016.
my table:
id | group_id | value ------+------------+--------- 1 | 1 | 15 2 | 1 | 16 3 | 1 | 20 4 | 2 | 12 5 | 2 | 15 6 | 3 | 8
expected output:
group_id | list -----------+----------------------- 1 | '15,16,17,18,19,20' 2 | '12,13,14,15' 3 | '8'
Advertisement
Answer
Here’s an alternate way. Create a function that takes start and end numbers and generates missing numbers.
create function dbo.get_list(@start int, @end int) returns varchar(1000) as begin declare @retval varchar(1000); set @retval = cast(@start as varchar(1000)); set @start = @start + 1; while @start <= @end begin set @retval = @retval + ',' + cast(@start as varchar(1000)); set @start = @start + 1; end; return @retval end
Once that is done, write this SQL:
select group_id, dbo.get_list(min(value), max(value)) from test group by group_id
Result
group_id list -------- ------------------ 1 15,16,17,18,19,20 2 12,13,14,15 3 8