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