码迷,mamicode.com
首页 > 数据库 > 详细

SQL中将某个表中的多行数据在一个字段显示

时间:2018-04-25 00:20:46      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:HERE   删掉   替换   start   技术分享   数据转换   close   alt   for   

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

比如表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>
View Code

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

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中将某个表中的多行数据在一个字段显示

标签:HERE   删掉   替换   start   技术分享   数据转换   close   alt   for   

原文地址:https://www.cnblogs.com/skye-mei/p/8934350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!