有时为避免循环操作数据库、列表展示等一些原因需要将数据及关联数据批量加载进行集中处理,一种解决办法可以使用FOR XML PATH将多行数据合并成一列,达到字段拼接的效果。例如有两个表,

  部门表T_Dept:

  

  员工表T_Emp:

  

  需要查询每个部门下的员工姓名,查询语句:

 1 SELECT ROW_NUMBER() OVER (ORDER BY DeptId) AS Row, DeptName
2 , LEFT(A.EmpName, LEN(A.EmpName) - 1) AS EmpName
3 FROM (
4 SELECT DeptId, EmpName = (
5 SELECT EmpName + ','
6 FROM T_Emp emp2
7 WHERE emp2.DeptId = emp1.DeptId
8 FOR XML PATH('')
9 )
10 FROM T_Emp emp1
11 GROUP BY emp1.DeptId
12 ) A
13 LEFT JOIN T_Dept dept ON dept.Id = A.DeptId

  结果集:

  也可以这样写:

 1 SELECT ROW_NUMBER() OVER (ORDER BY Id) AS Row, DeptName
2 , LEFT(A.EmpName, LEN(A.EmpName) - 1) AS EmpName
3 FROM (
4 SELECT Id, DeptName, EmpName = (
5 SELECT EmpName + ','
6 FROM T_Emp emp1
7 WHERE emp1.DeptId = dept.Id
8 FOR XML PATH('')
9 )
10 FROM T_Dept dept
11 ) A

  结果集:

  

  SQL脚本:

 1 CREATE TABLE [dbo].[T_Dept](
2
3 [Id] [int] IDENTITY(1,1) NOT NULL,
4
5 [DeptName] [nvarchar](10) NULL,
6
7 CONSTRAINT [PK_T_Dept] PRIMARY KEY CLUSTERED
8
9 (
10
11 [Id] ASC
12
13 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
14
15 ) ON [PRIMARY]
16
17 GO
18
19
20
21 CREATE TABLE [dbo].[T_Emp](
22
23 [Id] [int] IDENTITY(1,1) NOT NULL,
24
25 [DeptId] [int] NULL,
26
27 [EmpName] [nvarchar](10) NULL,
28
29 CONSTRAINT [PK_T_Emp_1] PRIMARY KEY CLUSTERED
30
31 (
32
33 [Id] ASC
34
35 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
36
37 ) ON [PRIMARY]
38
39 GO
40
41
42
43 ALTER TABLE [dbo].[T_Emp] WITH CHECK ADD CONSTRAINT [FK_T_Emp_T_Dept] FOREIGN KEY([DeptId])
44
45 REFERENCES [dbo].[T_Dept] ([Id])
46
47 GO
48
49
50
51 ALTER TABLE [dbo].[T_Emp] CHECK CONSTRAINT [FK_T_Emp_T_Dept]
52
53 GO
54
55
56
57 INSERT INTO [dbo].[T_Dept]
58 SELECT '销售部'
59 UNION ALL
60 SELECT '研发部'
61 UNION ALL
62 SELECT '人力资源部'
63 UNION ALL
64 SELECT '行政部'
65 UNION ALL
66 SELECT '财务部'
67
68
69
70 INSERT INTO [dbo].[T_Emp]
71 SELECT '1', 'Tom'
72 UNION ALL
73 SELECT '1', 'John'
74 UNION ALL
75 SELECT '2', 'Blue'
76 UNION ALL
77 SELECT '2', 'Banks'
78 UNION ALL
79 SELECT '3', 'Niki'
80 UNION ALL
81 SELECT '3', 'Yuki'
82 UNION ALL
83 SELECT '5', '小明'

使用FOR XML PATH实现多行数据合并成一列的更多相关文章

  1. Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform

    Expression构建DataTable to Entity 映射委托   1 namespace Echofool.Utility.Common { 2 using System; 3 using ...

  2. SQL SERVER 如何把1列多行数据 合并成一列显示

    示例 修改前:1列多行数据 修改后:合并成一列 示例语句 1 2 3 4 5 6 7 8 9 10 11 select 类别,     名称 = (         stuff(            ...

  3. sql server 多行数据合并成一列

    首先是源数据: ),cip.CheckIn_StartTime, )),cip.CheckIn_EndTime, )),cip.Rental_Price)) as content from Check ...

  4. Kettle 行列互换之——行转列(多列数据合并成一列变为多行)

    原始需求如下: 业务系统设置成这样,见截图. 工资项目为了方便录入,都是做成列的. 但是这些数据需要和另外的费用报销系统的数据关联,费用报销系统的费用项目是横向的,用费用项目.金额的多行来表达.那么这 ...

  5. SQL将多行数据合并成一行【转】

    转:https://blog.csdn.net/AntherFantacy/article/details/83824182 今天同事问了一个需求,就是将多行数据合并成一行进行显示,查询了一些资料,照 ...

  6. 个人永久性免费-Excel催化剂功能第100波-透视多行数据为多列数据结构

    在数据处理过程中,大量的非预期格式结构需要作转换,有大家熟知的多维转一维(准确来说应该是交叉表结构的数据转二维表标准数据表结构),也同样有一些需要透视操作的数据源,此篇同样提供更便捷的方法实现此类数据 ...

  7. 使用Notepad++将多行数据合并成一行

    1.按Ctrl+F,弹出“替换”的窗口: 2.选择“替换”菜单: 3.“查找目标”内容输入为:\r\n: 4.“替换为”内容为空: 5.“查找模式”选择为正则表达式: 6.设置好之后,点击“全部替换” ...

  8. oracle 多行数据合并一行数据

    在工作中遇见的oracle知识,多行合并成一行,记录一下 1.取出需要的数据,代码: (SELECT to_char(m.f_meetdate, 'yyyy-MM-dd'), decode(nvl(m ...

  9. SQL 将一列多行数据合并为一行 FOR XML PATH

    FOR XML PATH 方法是用于将查询结果集以XML形式展示,这样展示方式的好处不言而喻.现在我要介绍的FOR XML PATH的"另类"用法. 首先,我们先来看看它的正常用法 ...

随机推荐

  1. Hbase之过滤器的使用

    一.过滤器概念 基础API中的查询操作在面对大量数据的时候是非常物无力的,这里Hbase提供了高级的查询方法:Filter(过滤器).过滤器可以根据簇.列.版本等更多的条件来对数据进行过滤,基于Hba ...

  2. Let’s Encrypt 通配符证书,泛域名证书申请配置

    首先你可以查看下官方提供的支持申请通配符证书的客户端列表:https://letsencrypt.org/docs/client-options/. 参考链接:https://github.com/N ...

  3. 项目实战--JSON.toJSONString()

    需求说明:公司使用Swagger(接口文档在线生成工具),为了让前端同事更好的了解传入参数的详细情况,应用项目中接口(eg:分页查询接口)中使用dto对象来接受前端传入的参数,但是后面中心项目中接口是 ...

  4. python Logger模块单例模式

    前言 提前祝大家过个好年 最近忙于项目,今天抽出点时间写写Blog谈谈昨天遇到的问题 项目最近要收尾了,想把Logger规整一下,因为很多地方都有用到 Python的Logger模块是Python自带 ...

  5. SpringBoot对静态资源的映射规则

    在WebMvcAutoConfiguration类中有相对应的方法addResourceHandlers public void addResourceHandlers(ResourceHandler ...

  6. Redis Cluster 集群节点维护 (三)

    Redis Cluster 集群节点维护: 集群运行很久之后,难免由于硬件故障,网络规划,业务增长,等原因对已有集群进行相应的调整,比如增加redis nodes 节点,减少节点,节点迁移,更换服务器 ...

  7. 关于使用jq跨域请求的实现

    今天算是把js跨域请求搞定了,想实现跨越,首先想到的是JSONP,但是具体去做的时候,发现有很多坑.在本地测试好之后又发现目标网站做了https证书认证,也就是实用的jsonp请求地址必须是https ...

  8. React & Vue2 Butterfly图编排——让数据更自由地驱动DAG

    一.简介 Butterfly是由阿里云-数字产业产研部孵化出来的的图编辑器引擎,由咱们部门以及其他开发者共同维护开发,具有使用自由.定制性高的优势,已支持集团内外上百张画布,不夸张的说,我觉得可以算的 ...

  9. Python+Docker+Flask+pyecharts实现数据可视化

    1.数据加工pyecharts图实现: 数据源:本地CSV文件 ps:由于是跟生产环境做交互,生产环境指标由HSQL加工,使用存储过程挂后台定时运行,后使用python实现导出及定时分发,本地pyth ...

  10. 干电池升压5V,功耗10uA

    PW5100干电池升压5V芯片 输出电容: 所以为了减小输出的纹波,需要比较大的输出电容值.但是输出电容过大,就会使得系统的 反应时间过慢,成本也会增加.所以建议使用一个 22uF 的电容,或者两个 ...