SQL Server 中利用STUFF和FOR XML PATH()实现多行数据的拼接
来源:互联网 发布:java pagecache 不释放 编辑:程序博客网 时间:2024/05/18 00:43
将某一类下的信息显示成一条,如:
表tb_Student中数据:
ID Class_ID StudentName
--------------------------------------------------------------
1 1 张三
2 1 李四
3 1 王五
4 2 马六
5 2 赵七
6 3 孙八
需求:
以Class_ID为单位分组显示数据如下:
Class_ID StudentsName
------------------------------------------------------------------------
1 张三,李四,王五
2 马六,赵七
3 孙八
SQL语句:
<span style="font-size:12px;">select Class_ID,StndentsName=stuff((select ','+StudentName from tb_Student tmp where tmp.Class_ID=tb_Student.Class_ID for xml path('')),1,1,'')from tb_Studentgroup by tb_Student.Class_ID</span>
这里使用了SQL Server 2005版本以后加入的STUFF()以及FOR XML PATH().
1、STUFF():
①、作用
stuff(param1, startIndex, length, param2)
将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。
②、参数
param1
一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。
startIndex
一个整数值,指定删除和插入的开始位置。如果startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。
startIndex可以是 bigint 类型。
length
一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1中的最后一个字符。length
可以是 bigint 类型。
③、返回类型
如果param1是受支持的字符数据类型,则返回字符数据。如果param1是一个受支持的 binary 数据类型,则返回
二进制数据。
④、备注
如果结果值大于返回类型支持的最大值,则产生错误
⑤、示例
<span style="font-size:12px;">select stuff('qwertyuio',1,2,'123') --结果:123ertyuio select stuff('qwertyuio',1,4,'123') --结果:123tyuio select stuff('qwertyuio',2,6,'123') --结果:q123io select stuff('qwertyuio',3,4,'123') --结果:qw123uio </span>
2、FOR XML PATH() FOR XML PATH()就是将查询结果集以XML形式展现.,以上面的tb_Student表为数据源,用实例进行解释。
示例1:
SQL语句:
<span style="font-size:12px;">select top 4 Class_ID,StudentName from tb_Student FOR XML PATH()</span>
结果:
<span style="font-size:12px;"><row> <Class_ID>1</Class_ID> <StudentName>张三</StudentName> </row> <row> <Class_ID>1</Class_ID> <StudentName>李四</StudentName> </row> <row> <Class_ID>1</Class_ID> <StudentName>王五</StudentName> </row> <row> <Class_ID>2</Class_ID> <StudentName>马六</StudentName> </row> </span>
示例2(改变XML行节点的名称):
SQL语句:
<span style="font-size:12px;">select top 4 Class_ID,StudentName from tb_Student FOR XML PATH('Sourse')</span>
结果:
<span style="font-size:12px;"><Sourse> <Class_ID>1</Class_ID> <StudentName>张三</StudentName> </Sourse> <Sourse> <Class_ID>1</Class_ID> <StudentName>李四</StudentName> </Sourse> <Sourse> <Class_ID>1</Class_ID> <StudentName>王五</StudentName> </Sourse> <Sourse> <Class_ID>2</Class_ID> <StudentName>马六</StudentName> </Sourse> </span>
注:对于改变另外两个节点的名称,只需给字段起别名即可,这里不再赘述。
示例3(自定义输出方式):
SQL语句:
<span style="font-size:12px;">select top 4 '['+Class_ID+'--'+StudentName+']' from tb_Student FOR XML PATH()</span>
结果:
<span style="font-size:12px;">[1--张三][1--李四][1--王五][2--马六]</span>
通过上面的示例及讲解,想必已经明白了开头所用SQL的意思。
- SQL Server 中利用STUFF和FOR XML PATH()实现多行数据的拼接
- SqlServer实现oracle10g的 wmsys.wm_concat()/使用自连接、for xml path('')和stuff合并显示多行数据到一行中
- Sql Server STUFF与FOR XML PATH
- SQL之 Stuff和For xml path
- sql的for xml path 和 stuff 结合使用
- 【sqlserver】字符串拼接实现(for xml path ,stuff)
- 灵活运用 SQL SERVER FOR XML PATH和SQL Stuff用法
- sql server FOR XML PATH 字符串拼接
- FOR XMI PATH,STUFF 实现字段拼接
- SQL中使用FOR XML PATH对字段进行拼接
- SQL Server 中FOR XML PATH 的运用
- stuff 与 for xml path('')
- SQL多行数据拼接OUTER APPLY,CROSS APPLY,FOR XML AUTO
- 使用 SQL的 for xml path来进行字符串拼接
- SQL FOR XML PATH(多表字段拼接)
- Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- SQL SERVER FOR XML PATH
- 使用python写程序时遇到的几个小问题
- Oracle和sqlserver基本函数对比
- Ignatius迷宫逃亡
- 使用 SQL*Plus 执行 SQL, PL/SQL 和 SQL*Plus 语句
- Android ADB实现解析
- SQL Server 中利用STUFF和FOR XML PATH()实现多行数据的拼接
- 构造器与工厂方法的区别
- java常见面试题及答案(三)
- fckeditor的基本使用步骤和解释
- 【lua的require、dofile、loadfile、loadstring及luamodule机制】
- mysql|表row_format的静态与动态,Compact
- Linux终端tty设备驱动编程
- UIWebview的高级用法
- Java的多线程