在sql中使用for-xml
我有一个这样的代码用于连接多行中的值 输入:在sql中使用for-xml,sql,sql-server-2008,Sql,Sql Server 2008,我有一个这样的代码用于连接多行中的值 输入: ID Name ------------- ---------------------- 1 Deepak Kumar Goyal 2 Niladri Biswas 2 Priyanka Sarkar 3 Sumi Girijan 3 Suresh Beldar 3 Je
ID Name
------------- ----------------------
1 Deepak Kumar Goyal
2 Niladri Biswas
2 Priyanka Sarkar
3 Sumi Girijan
3 Suresh Beldar
3 Jeeva Baby
预期产出:
ID Name
------- --------------------------------------------------
1 Deepak Kumar Goyal
2 Niladri Biswas OR Priyanka Sarkar
3 Sumi Girijan AND Suresh Beldar AND Jeeva Baby
使用的查询:
select ID, SUBSTRING(
(
select ','+CAST(name AS VARCHAR)
from @t a where a.ID = b.ID
FOR XML PATH('')
),2,2000) as names
from @t b group by id
查询成功运行。您能帮助我理解这里对xml的需求以及它的工作方式和原因吗?这只是SQL Server中FOR xml
子句的一种常见(错误)用法。SQL Server没有其他一些SQL实现(如MySQL)所具有的允许查询将多个字段聚合为单个字段的group\u concat
功能
forxml
子句告诉服务器将结果行合并到一个XML文档中,它通过连接指定字段的值来实现这一点。在上面的查询中,您正在利用用于生成XML的字符串连接,并在此过程中添加逗号分隔符(显然不是XML)
简言之:这是一个黑客,但它工作得很好,被广泛使用
更多信息请参见此处:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它!