《将一列数据转换成行,并用逗号隔开》由会员分享,可在线阅读,更多相关《将一列数据转换成行,并用逗号隔开(3页珍藏版)》请在金锄头文库上搜索。
1、将一个表的一个列的多行内容拼接成一行,并用逗号隔开。比如表中有两列数据 :类别名称AAA企业1AAA企业2AAA企业3BBB企业4BBB企业5我想把这个表变成如下格式:类别名称AAA企业1,企业2,企业3BBB企业4,企业5一开始挺头疼的(会了的肯定没有这种感觉,不会那必须是头疼啊(*_*) ),从网上找了点资料,算是找到一种比较简单方便的方法吧,现在大体总结一下,供大家共同学习。原先的表名为Table_A,实现代码如下:select 类别, 名称 = (stuff(select , + 名称 from Table_A where 类别 = A.类别 for xml path(),1,1,)
2、from Table_A as A group by 类别这里使用了SQL Server 2005版本以后加入的stuff以及for xml path,先说下在上面这句sql中的作用,然后再详细的说明一下这两个的用法。for xml path() 这句是把得到的内容以XML的形式显示。stuff(select , + ep_name from ep_detail where ep_classes = a.ep_classes for xml path(), 1, 1, )这句是把拼接的内容的第一个“,”去掉stuff:1、作用stuff(param1, startIndex, length,
3、param2)将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。2、参数 param1:一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。 startIndex:一个整数值,指定删除和插入的开始位置。如果 startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。startIndex可以是 bigint 类型。 length:一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1 中的最
4、后一个字符。length 可以是 bigint 类型。 param2,返回类型。如果param1是受支持的字符数据类型,则返回字符数据。如果param1是一个受支持的 binary 数据类型,则返回二进制数据。示例select STUFF(abcdefg,1,0,1234) -结果为1234abcdefg select STUFF(abcdefg,1,1,1234) -结果为1234bcdefg select STUFF(abcdefg,2,1,1234) -结果为a1234cdefg select STUFF(abcdefg,2,2,1234) -结果为a1234defgfor xml pa
5、thfor xml path有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.假设有个表存放着学生的选课情况(stu_courses):接下来我们来看应用FOR XML PATH的查询结果语句如下:select stu_name,stu_course from stu_courses for xml path;结果如下:由此可以看出 FOR XML PATH 可以将查询结果根据行输出成XML各式!将一列数据转换成行, 并用逗号隔开select stuff(select , + 姓名 from 员工档案表A where 部门名=信息中心 and 单位号=01 for xml path(),1,1,)