Most of people need to select multiple row and convert it into CSV format.
Here I came with solutions.
For Example:-
1: Declare @tbl table (id int,sid int)
2: 3: insert into @tbl
4: select 1,11
5: union
6: select 1,12
7: union
8: select 1,13
9: union
10: select 2,21
11: union
12: select 2,22
13: 14: SELECT * FROM @tbl
15: 16: --With CTE:-
17: --------------------
18: ;WITH RowRank
19: AS
20: (21: SELECT id,CAST(sid AS VARCHAR) sid,ROW_NUMBER() OVER(PARTITION BY id order by id) AS Row FROM @tbl
22: )23: ,Concat(id,sid,Row)
24: AS
25: (26: SELECT id,CAST(RowRank.sid AS VARCHAR),Row FROM RowRank WHERE Row=1
27: UNION ALL
28: select RowRank.id, CAST(Concat.sid + ', ' + RowRank.sid AS VARCHAR ) ,RowRank.Row
29: from RowRank
30: inner join Concat on RowRank.id = Concat.id and RowRank.Row -1 = Concat.Row
31: 32: ) 33: ,CommaSeperatedResult (id, sid)34: as
35: (36: select Concat.id, Concat.sid
37: from Concat
38: join (select id, max(Row) max_row from RowRank group by id) max_row
39: on Concat.id = max_row.id and Concat.Row = max_row.max_row
40: )41: SELECT * FROM CommaSeperatedResult ORDER BY ID
42: 43: 44: --WITH FOR XML PATH:-
45: ------------------------------
46: select distinct id,
47: replace 48: ( 49: (50: select cast(sid as varchar)+',' from @tbl t where t.id=t1.id for XML path('')
51: ) +'$',',$',''
52: )53: as sid
54: from @tbl t1
55: Output is:-
----------------

No comments:
Post a Comment