sql实现一列的多个结果合并成一个结果,并分割,使用xml for path
引用自:Sql Server 的FOR XML PATH(‘‘)函数用法_chpllp的博客-CSDN博客
1. 如下表:
2. 转换xml
1 |
|
1 |
|
3. 加个分隔符和去掉根节点。
1 |
|
4. 配合stuff函数使用,去掉第一个分隔符号。
1 |
|
5. STUFF ( character_expression , start , length ,character_expression )
character_expression:字符数据
start :指定删除和插入的开始位置
length :指定要删除的字符数
character_expression : 替换start 到 length 的字符数据
6. 转义字符正常显示
有时候我们的数据库中有尖括号,然后有用到xml的时候,sql会自动的把尖括号进行转义,但是我们不需要转义,并且对这个有要求要用到,这时候我们可以用value的形式来实现,测试数据:
-
--测试数据
-
if not object_id(N'Tempdb..#T') is null
-
drop table #T
-
Go
-
Create table #T([ID] int,[Chemistry] nvarchar(47))
-
Insert #T
-
select 1,N'CaF<sub>2</sub>' union all
-
select 2,N'Al<sub>2</sub>O<sub>3<?sub>'
-
Go
-
--测试数据结束
用for xml path读取指标信息
-
SELECT
-
STUFF((
-
Select ','+Chemistry from #T FOR XML PATH('')),1,1,'')
读取的结果是这样的:
我们看到尖括号已经进行了转义,如果我们还想要尖括号,可以这样写:
-
SELECT
-
STUFF((
-
Select ','+Chemistry from #T FOR XML PATH(''),TYPE
-
).value('.','NVARCHAR(MAX)')
-
,1,1,'')
结果: