MSSQL 通过FOR XML PATH 模仿MYSQL的 group_concat 函数,將纪录值合并成字符串

时间:2022-09-23 09:48:05
MSSQL 通过FOR XML PATH 模仿MYSQL的 group_concat 函数,將纪录值合并成字符串
;with tbl(id, s, sort) as
(
select 1, '广东省', 3 union all
select 1, '广州市', 2 union all
select 1, '越秀区', 1 union all
select 2, '北京市', 2 union all
select 2, '朝阳区', 1
)
select id,
(
stuff((select N','+ s
from tbl
where id=t.id
order by sort desc
FOR XML PATH('')), 1, 1, N'')
) as xmls
from tbl as t
group by t.id
order by t.id

stuff(字符串表达式1,开始位置,长度,字符串表达式2):在字符串表达式1中在指定的开始位置删除指定长度的字符,并在指定的开始位置处插入字符串表达式2。返回新字符串。


select N','+ s from tbl FOR XML PATH('')將tbl 表的 S字段查询出来,并用xml格式表示, 中间用 , 隔开。


PATH('') 括号中表示字段值前后添加何种标签。


MYSQL 提供了直接分组合并的函数

select id, group_concat(s, ',')  as s from tbl group by id