如何Stuff和’For Xml Path’在Sql Server中工作
发布时间:2020-12-16 01:55:21 所属栏目:百科 来源:网络整理
导读:表是: +----+------+| Id | Name |+----+------+ | 1 | aaa || 1 | bbb || 1 | ccc || 1 | ddd || 1 | eee |+----+------+ 所需输出: +----+---------------------+| Id | abc |+----+---------------------+ | 1 | aaa,bbb,ccc,ddd,eee |+----+----------
表是:
+----+------+ | Id | Name | +----+------+ | 1 | aaa | | 1 | bbb | | 1 | ccc | | 1 | ddd | | 1 | eee | +----+------+ 所需输出: +----+---------------------+ | Id | abc | +----+---------------------+ | 1 | aaa,bbb,ccc,ddd,eee | +----+---------------------+ 查询: SELECT ID,abc = STUFF( (SELECT ',' + name FROM temp1 FOR XML PATH ('')),1,'' ) FROM temp1 GROUP BY id 此查询正常工作。但我只需要解释它是如何工作的,还是有任何其他或短的方法来做到这一点。 我很困惑地理解这一点。
下面是它的工作原理:
1.使用FOR XML获取XML元素字符串 将FOR XML PATH添加到查询结尾时,可以将查询的结果作为XML元素输出,其中元素名称包含在PATH参数中。例如,如果我们运行以下语句: SELECT ',' + name FROM temp1 FOR XML PATH ('') 通过传入一个空白字符串(FOR XML PATH(”)),我们得到以下代替: ,aaa,eee 2.使用STUFF删除前导逗号 STUFF语句逐字地将一个字符串“填充”到另一个字符串中,替换第一个字符串中的字符。然而,我们只是使用它来删除结果值列表的第一个字符。 SELECT abc = STUFF(( SELECT ',' + NAME FROM temp1 FOR XML PATH('') ),'') FROM temp1 STUFF的参数有: >要填充的字符串(在我们的例子中是一个完整的名字列表 所以我们最终得到: aaa,eee 3.加入id以获得完整的列表 接下来,我们只需要在临时表中的id列表中加入这个,就可以得到一个名字为id的ID列表: SELECT ID,abc = STUFF( (SELECT ',' + name FROM temp1 t1 WHERE t1.id = t2.id FOR XML PATH ('')),'') from temp1 t2 group by id; 我们有我们的结果: ----------------------------------- | Id | Name | |---------------------------------| | 1 | aaa,eee | ----------------------------------- 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |