sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)

来源:互联网 发布:淘宝逆战 编辑:程序博客网 时间:2024/05/29 18:34

SQL Server 中的 STUFF 函数的使用:

STUFF ( character_1 , start , length ,character_2 )作用:将character_1中自start(SQL中都是从1开始,而非0)起,删除length个长度的字符,然后用character_2替换删掉的字符。
  • character_1:一个字符数据表达式。character_1可以是常量、变量,也可以是字符列或二进制数据列。
  • start:一个整数值,指定删除和插入的开始位置。如果 start或 length 为负,则返回空字符串。如果start比param1长,则返回空字符串。start可以是 bigint 类型。
  • length:一个整数,指定要删除的字符数。如果 length 比character_1长,则最多删除到character_1 中的最后一个字符。length 可以是 bigint 类型。
  • character_2,返回类型。如果character_1是受支持的字符数据类型,则返回字符数据。如果character_1是一个受支持的 binary 数据类型,则返回二进制数据。

实例:select STUFF('abcdefg',2,2,'1234')       --结果为'a1234defg'


SQL Server 中的 for xml path

for xml path有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.

假设有个表存放着学生的兴趣爱好情况():

select * from Tu_User ;
结果如下:


接下来我们来看应用FOR XML PATH的查询结果语句如下:

select FName,FHobby from Tu_User for xml path;

结果如下:

由此可以看出 FOR XML PATH 可以将查询结果根据行输出成XML格式!

SELECT B.FName,B.FHobby FROM (SELECT FName,(SELECT FHobby+',' FROM Tu_User   WHERE FName=A.FName   FOR XML PATH('')) AS FHobbyFROM Tu_User A GROUP BY FName) B 
结果如下:

当然这样是通过子表的方式来查寻得到的结果,在项目中需要查的字段可能是十几个乃至几十个,这时候这样处理就不尽人意了,当然我也是从网上查找到别人的方法借鉴过来的,在这里就分享一下,希望大家看后多多批评指教:
这里呢就是将上述的两者相结合,
SELECT  FName ,STUFF((SELECT FHobby+',' FROM Tu_User 
  WHERE t_u.FName=FName order by FHobby
  FOR XML PATH('')),1,0,'') AS FHobby
FROM Tu_User  as t_uGROUP BY FName
结果如下:


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 艳姆1-6无删减完整 儿子你不能这样啊国语 在线 在厕所里肉妈咪第一章 儿子你不能这样啊国语17分钟 不行 我们不能这样 征服护士妈全文目录34章 迷糊故意穿超短裙坐公交 大妈咪女教师全集 雪白短裙教师妈咪风雨夜 母亲轮陷公交 客厅弄醒穿花裙子午睡的妈 沙发午睡花裙子在线资源 公交上的妈咪 儿子你要高就快点你国语 花裙子母亲午睡 儿子你不能这样啊国语高清 被要求穿超级短的超短裙 穿花裙子躺在沙发上 客厅弄醒午睡的妈连接 家庭毋HH伦s线视频中字 客厅弄硬午睡的儿子短文 客厅搞午睡的母亲 弄醒客厅午睡的母亲在线播放 弄醒午睡的妈视频连接 在客厅睡的午的母亲电影 客厅午睡的母亲在线下载 韩国午睡弄醒午睡的妈 在客厅弄醒午睡的 客厅午睡的母亲穿裙子在线播放 客厅午睡的母亲自拍 客厅里硬搞午睡的母亲视频 对白搞硬沙发午睡的儿子 客厅沙发儿子碎花裙 电影客厅午睡的母亲 客厅午睡以为你是爸爸 客厅弄醒午唾的儿子 客厅搞硬午睡的儿子小说 客厅弄醒穿花裙子午睡的妈电影 在客厅里弄醒午睡的儿子 中午弄醒正在午睡中的护校小 客厅弄醒午睡的妈视频完整迅雷