项目需求:将某个表中的多行数据在一个字段显示,如下:

比如表A中有字段 ID,NAME,

表B中有字段ID,PID,DES,

表A,表B中的数据分别如下:

ID NAME
1 张三
2 李四

ID PID DES
1 1 语文
2 1 数学
3 1 外语
4 2 历史
5 2 地理

最终我想显示的效果为:

ID NAME KC
1 张三 语文,数学,外语
2 李四 历史,地理

方法:使用sql中的STUFF函数与for xml path

1.for xml path是将将查询结果集以XML形式展现

比如对于表B,select * from b for xml path('')

得到的结果集如下:

<ID>1</ID>
<PID>1</PID>
<DES>语文</DES>
<ID>2</ID>
<PID>1</PID>
<DES>数学</DES>
<ID>3</ID>
<PID>1</PID>
<DES>外语</DES>
<ID>4</ID>
<PID>2</PID>
<DES>历史</DES>
<ID>5</ID>
<PID>2</PID>
<DES>地理</DES>

这里数据集不是作为多行数据展示

2.stuff函数的用法为:stuff(param1, startIndex, length, param2)
说明:将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。

因此,将多行数据转换为一行的格式写法为:

select ID as ID,Name as NAME,
(select stuff((select ','+DES from b where b.PID=a.ID for xml path('')),1,1,'')) as KC
from a

SQL中将某个表中的多行数据在一个字段显示的更多相关文章

  1. SQL Server批量向表中插入多行数据语句

    因自己学习测试需要,需要两个有大量不重复行的表,表中行数越多越好.手动编写SQL语句,通过循环,批量向表中插入数据,考虑到避免一致问题,设置奇偶行不同.个人水平有限,如有错误,还望指正. 语句如下: ...

  2. 6-03使用SQL语句一次型向表中插入多行数据

    通过将现有表中的数据添加到已存在的表中: INSERT INTO <表名><列名> SELECT<列名> FROM<源表名> 将UserInfo的数据添 ...

  3. 【Sql Server】使用触发器把一个表中满足条件的数据部分字段插入到另一个表中

    create trigger 触发器名称 on 对哪个表起作用 after insert,update as return set nocount on begin transaction; inse ...

  4. SQL将用户表中已存在的数据所有姓名(汉字)转换为拼音首字母

    实现方法: --函数 Create function [dbo].[fn_GetPy](@str nvarchar(4000)) returns nvarchar(4000) --用于加密 --WIT ...

  5. sql 删除完全表中完全重复的数据保留一条

    1.删除完全重复数据 原始数据: 期望数据: delete result from (select ROW_NUMBER () over(partition by id order by id) r, ...

  6. SQL Server 用表中已有数据造数据

    从表中选择数据再插入到表中(select XXX into 与insert into XXX select的结合) 在做性能测试时需要大量的业务数据.完全从画面造数据比较费时间,使用SQL文批量插入数 ...

  7. EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的

    我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...

  8. Sql server的Merge语句,源表中如果有重复数据会导致执行报错

    用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说 ...

  9. 监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)

    原文:监控SQL:执行表中所有sql语句.记录每个语句运行时间(3) 通过执行一个 带参数的存储过程  exec  OpreateTB('OpreateUser','IsRun')  更新表的数据 表 ...

随机推荐

  1. MySql用statement实现DDL,DML,DQL的操作Demo

    Demo1 Connection connection=null; Statement stmt=null; int result=-1; try { Class.forName("com. ...

  2. Dijkstra算法 最短路径 (部分)

    void Dijkstra(int n, int v, int *dist, int *prev, int c[maxnum][maxnum]) {     bool s[maxnum];       ...

  3. C/C++中虚函数的调用

    代码: #include <iostream> using namespace std; class A{ public: virtual void print(){ cout<&l ...

  4. 导入表数据 txt

    导入表数据 txt mysql> load data infile "D:/import.txt" into table shop;输出: Query OK, rows af ...

  5. js 获取mac地址

    js 获取mac地址 function MacInfo(){ var locator =new ActiveXObject ("WbemScripting.SWbemLocator" ...

  6. Html5 学习之 Html5功能判断插件 Modernizr

    ---恢复内容开始--- Modernizr 浏览器对HTML5和CSS3开发的功能检测类库 由于当前用户使用的浏览器版本较多,对H5和CSS3的支持也各不相同.前端的开发者,在使用一些新的特性的时候 ...

  7. AngularJS指令的作用域

    参考文章:https://segmentfault.com/a/1190000002773689

  8. C# 过滤SerialPort端口

    C#中的SerialPort类只能通过SerialPort.GetPortNames()来获取端口名字,而且出来都是COM+数字的字样,如果我要识别COM端口是什么设备的,它就无能为力了,此时我们可以 ...

  9. QM项目开发文档整理

    QM项目开发文档整理 前言 在W公司工作4个多月,庆幸接触到的全是"硬"项目,真枪实干,技术.经验.能力都得到了很大提升. QM项目 此项目WEB前端学到的东西很多,对PHP项目的 ...

  10. ios打包ipa的四种实用方法(.app转.ipa)-备

    感谢大神分享这个博客 总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏->Product->Arc ...