SQL SERVER将多行数据合并成一行(转)
1)比如表中有三列数据:
2)执行如下查询:

1 SELECT [USER_NAME], [USER_ACCOUNT]
2 , [ROLE_NAME] = stuff((
3 SELECT ',' + [ROLE_NAME]
4 FROM [WAP_WORKSHEET].[dbo].[userTest]
5 WHERE [USER_ACCOUNT] = a.[USER_ACCOUNT]
6 FOR XML path('')
7 ), 1, 1, '')
8 FROM [WAP_WORKSHEET].[dbo].[userTest] a
9 GROUP BY [USER_NAME], [USER_ACCOUNT]

3)显示如下结果:
STUFF函数:
a.作用
stuff(param1, startIndex, length, param2)
将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。
b.参数
param1
一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。
startIndex
一个整数值,指定删除和插入的开始位置。如果 startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。startIndex可以是 bigint 类型。
length
一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1 中的最后一个字符。length 可以是 bigint 类型。
c.返回类型
如果param1是受支持的字符数据类型,则返回字符数据。如果param1是一个受支持的 binary 数据类型,则返回二进制数据。
d.备注
如果结果值大于返回类型支持的最大值,则产生错误。
FOR XML PATH 将查询结果集以XML形式展现,查询示例:
SELECT '[' + [USER_NAME] + ',' + [ROLE_NAME] + ']'
FROM [WAP_WORKSHEET].[dbo].[userTest]
WHERE [USER_NAME] = '蔡诗德'
FOR XML path('');
结果如图:
4)实际应用:
SELECT USER_ACCOUNT AS '用户账户', USER_NAME AS '用户名', ORGANIZATION_NAME AS '组织'
, '角色' = REPLACE(REPLACE(REPLACE(STUFF((
SELECT ',' + ROLE_NAME
FROM [dbo].[wapUserAndRole_20190612_b]
WHERE USER_ACCOUNT = a.USER_ACCOUNT
FOR XML path('')
), 1, 1, ''), '个人中心管理员,', ''), ',个人中心管理员', ''), '个人中心管理员', '')
FROM [dbo].[wapUserAndRole_20190612_b] a
GROUP BY USER_ACCOUNT, USER_NAME, ORGANIZATION_NAME
ORDER BY ORGANIZATION_NAME;
外业人员信息查询

1 SELECT USER_ACCOUNT AS '用户账户', USER_NAME AS '用户名', ORGANIZATION_NAME AS '组织'
2 , '角色' = REPLACE(REPLACE(REPLACE(STUFF((
3 SELECT ',' + ROLE_NAME
4 FROM [dbo].[wapUserAndRole_20190612_b]
5 WHERE USER_ACCOUNT = a.USER_ACCOUNT
6 FOR XML path('')
7 ), 1, 1, ''), '个人中心管理员,', ''), ',个人中心管理员', ''), '个人中心管理员', '')
8 FROM [dbo].[wapUserAndRole_20190612_b] a
9 GROUP BY USER_ACCOUNT, USER_NAME, ORGANIZATION_NAME
10 ORDER BY ORGANIZATION_NAME;

原文引自:https://www.cnblogs.com/hendrix/p/11012772.html
SQL SERVER将多行数据合并成一行(转)的更多相关文章
- SQL SERVER将多行数据合并成一行(转载)
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes ep_name A ...
- SQL SERVER将多行数据合并成一行
1)比如表中有三列数据: 2)执行如下查询: SELECT [USER_NAME], [USER_ACCOUNT] , [ROLE_NAME] = stuff(( SELECT ',' + [ROLE ...
- sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果
select [value] = stuff((select ','+modmb003 from modmb detail where modmb=18 for xml path('')), 1, ...
- SQL将多行数据合并成一行【转】
转:https://blog.csdn.net/AntherFantacy/article/details/83824182 今天同事问了一个需求,就是将多行数据合并成一行进行显示,查询了一些资料,照 ...
- 使用Notepad++将多行数据合并成一行
1.按Ctrl+F,弹出“替换”的窗口: 2.选择“替换”菜单: 3.“查找目标”内容输入为:\r\n: 4.“替换为”内容为空: 5.“查找模式”选择为正则表达式: 6.设置好之后,点击“全部替换” ...
- sql里将重复行数据合并为一行,数据用逗号分隔
一.定义表变量 DECLARE @T1 table ( UserID int , UserName ), CityName ) ); ,'a','上海') ,'b','北京') ,'c','上海') ...
- SQL Server中将多行数据拼接为一行数据(一个字符串)
表A中id与表B中aid为一对多的关系 例如: 表A: id name a1 tom a2 lily a3 lucy 表B: id aid value b1 a1 B1 b2 a1 B2 b3 a2 ...
- Oracle查询多行数据合并成一行数据
例如: select base_id, translate (ltrim (text1, '/'), '*/', '*,') xmmc,translate (ltrim (text2, '/'), ' ...
- SQLServer 中多行数据合并成一行数据(一个字段)
需求:有四行数据,如下: 1.苹果 2.橘子 3.桃子 4.波罗 合并成一个字段:苹果,橘子,桃子,波罗: 需求明确之后,先弄点测试数据,上代码: --创建一个临时表 Create table #te ...
随机推荐
- MyBatis框架之mybatis逆向工程自动生成代码
http://www.jb51.net/article/82062.htm Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们 ...
- php 防盗链
防盗链的技术已经很普遍了,有些网站不喜欢自己的图片被别的网站直接复制使用,便使用了防盗链的技术,这样别人在直接复制使用网站图片时,图片便会按照程序的设定不显示或显示防盗链等字样. 使用了防盗链技术,不 ...
- oracle em启动问题
这种情况出现的可能性是(1)主机IP地址改变,(2)主机名改变,(3)移植到全新的主机,(4)监听程序未启动,5)oracle服务也检查一下 关于orcl的启动: emctl start dbcons ...
- div动画旋转效果
animation: spin 10s linear infinite;
- 性能测试工具之WebBench
一.简介 WebBench是一款在Linux下使用非常简单的压力测试工具.它的原理是:WebBench首先fork出多个子进程,每个子进程都循环做web访问测试.子进程把访问的结果通过pipe告诉父进 ...
- Python学习之==>内置函数、列表生成式、三元表达式
一.内置函数 所谓内置函数就是Python自带的函数 print(all([0,2,3,4])) #判断可迭代的对象里面的值是否都为真 print(any([0,1,2,3,4])) #判断可迭代的对 ...
- 【Linux 应用编程】基础知识
错误提示 Linux 提供的系统调用API,通常会在失败的时候返回 -1.如果想获取更多更详细的报错信息,需要借助全局变量 errno 和 perror 函数: #include <stdio. ...
- linux 正则表达式 元字符
\b 单词边界 \bcool\b 只匹配cool字符串 [root@MongoDB ~]# cat test.txt i am mike1 i am mike i am mike12 匹配有mike ...
- Springboot2.x集成Redis集群模式
Springboot2.x集成Redis集群模式 说明 Redis集群模式是Redis高可用方案的一种实现方式,通过集群模式可以实现Redis数据多处存储,以及自动的故障转移.如果想了解更多集群模式的 ...
- JavaScript Return Object.Type
var getType = function(obj) { if (obj == null) { return String(obj); } return typeof obj === 'object ...