sqlserver 把SELECT结果集中一列的所有的值 用逗号隔开放进一个字段内
首先我们有一个表 查询结果如下:

现在我们想要把USER_NAME这一列的内容 放到一个字段里面去:

一行sql语句解决问题:
SELECT STUFF(( SELECT ',' +convert(VARCHAR, USER_NAME) FROM TE_USER FOR XML PATH('')), 1, 1, '') AS UserName
解释一下上面这条语句:
1,首先STUFF函数在上面的语句里的作用是去除拼接的字符串最前面的逗号
STUFF函数的用法大概是STUFF(param1, startIndex, length, param2) 意思是将param1中自startIndex(SQL中都是从1开始 而非0)起 删除length个字符 然后用param2替换删掉的字符 具体用法请自行百度
2,重点说一下 FOR XML PATH:
执行SELECT * FROM TE_USER FOR XML PATH语句得到的结果:
<row>
<USER_ID>1</USER_ID>
<USER_NAME>张三</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
</row>
<row>
<USER_ID>2</USER_ID>
<USER_NAME>李四</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
</row>
<row>
<USER_ID>3</USER_ID>
<USER_NAME>王五</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
</row>
看得出来 是把sql执行的结果转换成xml格式了
我们再来执行一下下面这条sql SELECT * FROM TE_USER FOR XML PATH('ABC')
<ABC>
<USER_ID>1</USER_ID>
<USER_NAME>张三</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
</ABC>
<ABC>
<USER_ID>2</USER_ID>
<USER_NAME>李四</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
</ABC>
<ABC>
<USER_ID>3</USER_ID>
<USER_NAME>王五</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
</ABC>
发现xml的row节点变成我们自定义的ABC了 那么我们如果用 FOR XML PATH('') 就代表把节点变为空了:
<USER_ID>1</USER_ID>
<USER_NAME>张三</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
<USER_ID>2</USER_ID>
<USER_NAME>李四</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
<USER_ID>3</USER_ID>
<USER_NAME>王五</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
把节点变空了以后 我们执行SELECT ',' +convert(VARCHAR, USER_NAME) FROM TE_USER FOR XML PATH('') 语句 结果:
,张三,李四,王五
这就实现了USER_NAME这一列的值取出来拼接到一起了 再用我们上面说的STUFF函数把最前面的逗号去掉 就可以了。
以上。
sqlserver 把SELECT结果集中一列的所有的值 用逗号隔开放进一个字段内的更多相关文章
- linux下处理excel里copy的某列的字符串,去除行末空格并添加特殊字段
背景:从excel里copy出一列数据到txt,然后放到linux下处理,发现每一行末尾都是固定个数的空格,我想要在每行字符串末尾加固定字段并逗号隔开输出, 1.将特定字段取出,去掉每行末尾的不定个数 ...
- SQLSERVER 里SELECT COUNT(1) 和SELECT COUNT(*)哪个性能好?
SQLSERVER 里SELECT COUNT(1) 和SELECT COUNT(*)哪个性能好? 今天遇到某人在我以前写的一篇文章里问到 如果统计信息没来得及更新的话,那岂不是统计出来的数据时错误的 ...
- SqlServer创建数据表描述及列描述信息
SqlServer创建数据表描述及列描述信息 Intro Q: 为什么要创建描述信息? A: 鼠标悬停在对应表和列上时,会出现描述信息,可以提高工作的效率,借助工具我们根据数据表可以生成Model,可 ...
- SQLSERVER中分割字符串成多列
今天修改到之前的大佬的代码,居然把多个Id存在一个列里面,还是用的逗号分割...特么查询的时候怎么办??? 网上搜索了半天,终于找到了SqlServer里面有一个PARSENAME函数,可以按.(点) ...
- Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全
MySql行转列 以id分组,把name字段的值打印在一行,逗号分隔(默认) select CustomerDrugCode,group_concat(AuditItemName) from noau ...
- sqlserver 插入数据时异常,仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'XXXXX.dbo.XXXXXXXXX'中的标识列指定显式值。
INSERT INTO XXXXXXXXX.dbo.XXXXXXXXX select * from XXXXXXXXX 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'X ...
- sqlserver中select造成死锁
死锁过程: select语句使用非聚族索引查询产量信息,会对非聚族索引添加共享锁,由于非聚族索引上没有select的全部数据列,(所以会有书签查找出现,)需要查询产量表.查询产量表时,需要对产量表数据 ...
- SqlServer中的自增的ID的最后的值:
SqlServer中的自增的ID的最后的值: SELECT SCOPE_IDENTITY() --返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值.SELECT @@I ...
- SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步
原文:SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步 由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名 ...
随机推荐
- Python探索记(17)——函数
# @Time : 2017/7/8 18:40 # @Author : 原创作者:谷哥的小弟 # @Site : 博客地址:http://blog.csdn.net/lfdfhl # @DESC : ...
- 【英语】Bingo口语笔记(85) - ain,ane读法
- IntelliJ IDEA下SVN配置及使用
一.在IDEA中使用SVN,首先需要下载安装 TortoiseSVN 插件. 打开 TortoiseSVN 下载地址,选择适合自己的系统类型下载. 接下来,进行安装即可.选择Modify,默认 com ...
- Python Requests快速入门
迫不及待了吗?本页内容为如何入门Requests提供了很好的指引.其假设你已经安装了Requests.如果还没有, 去 安装 一节看看吧. 首先,确认一下: Requests 已安装 Requests ...
- Intent详解以及实例
Android中统一用Intent来封装程序的“调用意图“.不管程序想启动一个Activity,一个Servicer,还是一个BroadcastReceiver.使用Intent提供了一个统一的编程模 ...
- 读论文系列:Object Detection ICCV2015 Fast RCNN
Fast RCNN是对RCNN的性能优化版本,在VGG16上,Fast R-CNN训练速度是RCNN的9倍, 测试速度是RCNN213倍:训练速度是SPP-net的3倍,测试速度是SPP-net的3倍 ...
- 关于quartus工程添加文件的说明
quartus工程中要添加bsf文件的话需要将源文件也一同添加进来,添加ip核需要添加qip文件,时序约束文件只有添加到工程中才有效果,而timequest分析时需要制定约束文件.
- 如何在本地浏览器访问nginx
1.打开vmware"编辑虚拟机"设置,点击“网络适配器”选择“桥联模式”: 2.开启该虚拟机,输入用户名root及密码登陆服务器: 3.以管理员身份打开cmd,在命令窗口输入ip ...
- [Err] 1067 - Invalid default value for 'xxxTime'
下面是导入sql脚本的的局部脚本 `xxxTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 发现是NO_ZERO_IN_DATE,NO_Z ...
- 第十五届浙江省赛 F Now Loading!!!
Now Loading!!! Time Limit: 1 Second Memory Limit: 131072 KB DreamGrid has integers . DreamGrid ...