当前位置:网站首页>SQLSERVER将子查询数据合并拼接成一个字段
SQLSERVER将子查询数据合并拼接成一个字段
2022-07-30 03:11:00 【emgexgb_sef】
业务场景:
有两张表,部门表和员工表
部门表:
部门编码部门名称
1 A
2 A
3 A
4 B
员工表:
员工名称 所属部门
张三 1
李四 1
王五 1
赵六 2
现在需要一个部门人员报表,要求将该部门的员工合并显示在一列,如:
部门编码 部门名称 所属人员
1 A 张三、李四、王五
2 B 赵六
解决方案:
通过SQLSERVER的FOR XML PATH函数 + STUFF函数,对查询出来的数据进行合并拼接,放到指定的字段
select STUFF((select ‘,’ + emp.name from t_employee emp where emp.dept_id = dept.id for xml path(‘’)),1,1,‘’) as emp_names from t_Department dept
解析:
一、
FOR XML PATH (“行名称”) 将查询结果集以XML形式展现,将多行的结果,展示在同一行
--第一行
<列1名称>列1内容</列1名称> --第一列
<列2名称>列2内容</列2名称>
……
--第二行
<列1名称>列1内容</列1名称> --第一列
<列2名称>列2内容</列2名称>
……
二、
STUFF(expression,start,length,replacewith)
STUFF 函数将字符串插入到另一个字符串中。它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。
1、expression
字符数据的表达式。expression可以是常量、变量,也可以是子查询的字段
2、start
start用来指定删除和插入开始位置的数值。 如果 start 值为负或为零,则返回空字符串。 如果 start 的长度大于第一个 expression,则返回空字符串。start 的类型也可以是 bigint。
注意:SQLSERVER 从1开始,start 值1 表示第一个字符。
3、length
length用来指定要删除的字符个数。 如果 length值 为负,则返回空字符串。 如果 length 的长度大于第一个 character_expression,则最多可以删除到最后一个 character_expression 中的最后一个字符。 如果 length 为零,则插入在 start 位置发生,并且不会删除任何字符。length 的类型也可以是 bigint。
4、repacewith
替换字符表达式。同样,也可以是常量、变量,也可以是字段或二进制字段。
从 start 开始替换 length 个字符的 expression。 如果 repacewith为 NULL,则在不插入任何内容的情况下删除字符。
5、返回类型
如果 expression是字符数据类型,则返回字符数据。
如果 expression是二进制数据类型,则返回二进制数据。
注意:
expression 如果是子查询语句,则需要在查询结果加上一个字符,如上图例子,否则执行的结果会带出查询的字段名:
name >张三李四
这是因为:直接查询字段,FOR XML PATH会默认返回字段名作为列名称,加上’,'之后,该列就没有名称,那么自然返回的就是,张三,李四,…此时,再用STUFF函数去掉第一个逗号,即可
如果有讲错或者疏漏的地方,还望指点!
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- NLP自然语言处理(一)
- 测试人员,除了测试还得会点什么
- [Andrioid开发] Splash界面/用户协议与隐私政策弹窗/界面开发
- 【高性能计算】openMP
- NLP Natural Language Processing (2)
- [Flink] How to determine the cluster planning size from development to production launch?
- Open address method hash implementation - linear detection method
- QT基础第三天(3)widget,dialog和mainwindow
- 【GPU并行计算】利用OpenCL&OpenCLUtilty进行GPU并行计算
- 【JS】iframe 嵌入页面用法
猜你喜欢
随机推荐
【GPU并行计算】利用OpenCL&OpenCLUtilty进行GPU并行计算
雪花是否一样问题
状态空间表示
联邦学习综述(二)——联邦学习的分类、框架及未来研究方向
WPF 学习笔记《WPF布局基础》
3种实现文本复制功能的方法
Three years of experience will only be a little bit (functional testing), and you may not even be able to find a job after resigning.
Overview of Federated Learning (2) - Classification, Framework and Future Research Directions of Federated Learning
基于数据驱动故障预测的多台电力设备预测性维护调度
三年经验只会点点点(功能测试),辞职后你可能连工作都找不到了。
HCIP实验(05)OSPF综合实验
QT based on the third day (3) widget, dialog and mainwindow
还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS
【高性能计算】openMP
Testers, what else do you need to know besides testing?
分类之决策树分类
【ModelArts系列】华为ModelArts训练yolov3模型(训练管理)
Leetcode.19 删链表倒数第 N 个结点(栈/先后指针)
Detailed explanation of carousel picture 2 - carousel pictures through left positioning
联邦学习综述(一)——联邦学习的背景、定义及价值





![[Flink] How to determine the cluster planning size from development to production launch?](/img/7a/52dae876a50980c5055be131c2254b.png)



