首页 > 数据库技术 > 详细

【SQL】多行转一列 FOR XML PATH

时间:2020-04-08 18:06:31      阅读:84      评论:0      收藏:0      [点我收藏+]
CREATE TABLE TEST6
(
NAME VARCHAR(200),
ENTRY_DATE DATE,
COMPANY VARCHAR(200)
)

INSERT INTO TEST6 VALUES(王强,2008-1-1,电信);
INSERT INTO TEST6 VALUES(王强,2009-1-1,移动);
INSERT INTO TEST6 VALUES(王强,2010-1-1,联通);
INSERT INTO TEST6 VALUES(李四,2008-1-1,电网);
INSERT INTO TEST6 VALUES(李四,2009-1-1,财政局);
INSERT INTO TEST6 VALUES(张三,2012-12-1,腾讯);
INSERT INTO TEST6 VALUES(张三,2013-12-1,阿里);
INSERT INTO TEST6 VALUES(张三,2014-12-1,美团);
INSERT INTO TEST6 VALUES(张三,2015-12-1,饿了么);

测试表结构如上:

现在需要知道每个员工的任职次序

技术分享图片

 

 

 

此时就用到了  FOR XML PATH函数

select COMPANY from TEST6 where NAME = 王强 for xml path(‘‘)

查询结果:

技术分享图片

 

 

如果在path中给个参数

select COMPANY from TEST6 where NAME = 王强 for xml path(node)

查询结果:

技术分享图片

可以看出,原来的节点增加了Node的标签

 

select COMPANY as myCom from TEST6 where NAME = 王强 for xml path(node)

 

技术分享图片

 

 可以看出子节点的标签名也被改了

 

那如果不想要xml格式的,也可以用以下方法代替

SELECT [ + COMPANY + ] FROM TEST6 where NAME = 王强 FOR XML PATH(‘‘)

查询结果如下:

技术分享图片

 

 

最后拿出我们需要的结果

SELECT B.Name,LEFT(StuList,LEN(StuList)-1) as hobby FROM (
SELECT Name,
(SELECT COMPANY+, FROM TEST6 
  WHERE Name=A.Name 
  FOR XML PATH(‘‘)) AS StuList
FROM TEST6 A 
GROUP BY Name
) B

查询结果

技术分享图片

 

 

 

 

参考自:https://www.cnblogs.com/yasuo2/p/6433697.html

 

【SQL】多行转一列 FOR XML PATH

原文:https://www.cnblogs.com/yhnet/p/12660567.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!