要求按type分组查询后,把相同type的,name列值合并,达到如下效果:
解析如下:
一、FOR xml path
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数或存储过程来完成的工作。那么以一个实例为主.
假设有张查询表如下
sql 一:
select type,name from tb_account
where name like '%测试入职%'
FOR xml path
查询结果
<row>
<type>0</type>
<name>测试入职登录</name>
</row>
<row>
<type>1</type>
<name>测试入职6</name>
</row>
<row>
<type>0</type>
<name>测试入职</name>
</row>
sql 二:
select type,name from tb_account where name like '%测试入职%' FOR xml path('')
查询结果:
<type>0</type> <name>测试入职登录</name> <type>1</type> <name>测试入职6</name> <type>0</type> <name>测试入职</name>
sql 三:
select type,name from tb_account where name like '%测试入职%' FOR xml path('root')
查询结果 :
<root> <type>0</type> <name>测试入职登录</name> </root> <root> <type>1</type> <name>测试入职6</name> </root> <root> <type>0</type> <name>测试入职</name> </root>
sql 四:
select 10+type,','+name+',' from tb_account where name like '%测试入职%' FOR xml path('')
查询结果
10,测试入职登录,11,测试入职6,10,测试入职,
二、stuff函数stuff(param1, startIndex, length, param2)
说明:将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。备注
如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。示例
以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串。SELECT STUFF('abcdef', 2, 3, 'ijklmn');
GO下面是结果集:
---------
aijklmnef