SQL Server中将多行数据拼接为一行数据(一个字符串)

摘要:
--2.应在语句的末尾应用Forxmlpath(“”)来生成xml--3.Forxmlpath中的path参数是生成的xml的顶级节点--4.字段名或别名将成为xml的子节点,而没有列名或别名的字段将直接显示。[value]+“,”是由--5分隔的数据。当合并多行数据并将其显示为一行数据时,使用自连接。

SQLServer中将多行数据拼接为一行数据(一个字符串)

方法一: 使用T-SQL

DECLARE @Users NVARCHAR(MAX)

SET @Users = ''

SELECT @Users = @Users + ',' + UserName FROM dbo.[User]

WHERE RoleID = 1

SELECT @Users

转载自:http://www.fengfly.com/plus/view-172336-1.html

方法二:使用for xml path('') 和stuff

--使用自连接、forxmlpath('')和stuff合并显示多行数据到一行中

--注

--1、计算列可以不用包含在聚合函数中而直接显示,如下面语句的val。

--2、forxmlpath('')应该应用于语句的最后面,继而生成xml。

--3、forxmlpath('root')中的path参数是生成的xml最顶级节点。

--4、字段名或是别名将成为xml的子节点,对于没有列名(字段+'')或是没有别名的字段将直接显示。[value]+','则是用,分隔的数据(aa,bb,)。

--5、对于合并多行数据显示为一行数据时使用自连。

--生成测试表并插入测试数据

createtabletb(idint,valuevarchar(10))

insertintotbvalues(1,'aa')

insertintotbvalues(1,'bb')

insertintotbvalues(2,'aaa')

insertintotbvalues(2,'bbb')

insertintotbvalues(2,'ccc')

go

--第一种显示

selectid,[val]=(

select[value]+','fromtbasbwhereb.id=a.idforxmlpath(''))fromtbasa

--第一种显示结果

--1aa,bb,

--1aa,bb,

--2aaa,bbb,ccc,

--2aaa,bbb,ccc,

--2aaa,bbb,ccc,

--第二种显示

selectid,[val]=(

select[value]+','fromtbasbwhereb.id=a.idforxmlpath(''))fromtbasa

groupbyid

--第二种显示结果

--1aa,bb,

--2aaa,bbb,ccc,

--第三种显示

selectid,[val]=stuff((

select','+[value]fromtbasbwhereb.id=a.idforxmlpath('')),1,1,'')fromtbasa

groupbyid

--第三种显示结果

--1aa,bb

--2aaa,bbb,ccc

--典型应用

--AMD_GiftNew中获取所有的管理员ID

--selectadminIds=stuff((select','+cast(UserIdasvarchar)fromMM_UserswhereRoleId=1andflag=0forxmlpath('')),1,1,'')

--典型应用显示结果

--3,27

转载自:http://blog.csdn.net/kula_dkj/article/details/8568599

select PPID, [val]=stuff((
select CAST(SKUCD AS VARCHAR) + ',' from PPSKUTbl as b where b.PPID = a.PPID for xml path('')),1,1,'') from PPSKUTbl as a where PPID = @PPIDgroup by PPID

免责声明:文章转载自《SQL Server中将多行数据拼接为一行数据(一个字符串)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇图片标注工具LabelImg使用教程【随手记录】时间格式转换报错:while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ'下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

多线程实现数据库的并发操作

在Java中,程序需要操作数据库,操作数据首要事就是要获得数据库的Connection对象,利用多线程对数据导入数据库中将会加快操作进度,但是多个线程共享Connection对象,是不安全的,因为可以利用Java中的ThreadLocal为每个线程保存一个Connection对象,代码如下: package com.quar.innovation.db;...

解析数据库连接字符串 (将Data Source、Initial Catalog、User ID、Password取出)

private void AnalysisConnectionstring() { string tempStr = “Data Source=192.168.2.123;Initial Catalog=caxastat;Persist Security Info=True;User ID=sa;Passwor...

sql server中部分函数功能详解

1.TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。 SQL Server 的语法: SELECT TOP number|percent column_name(s) FROM table_name 2.’%%’查询 我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或...

数据库(DB)

1.定义: 存放数据的仓库,按照数据结构来组织、存储和管理数据的仓库 2.数据库类型 1.关系型数据库: 以表的形式存储数据,表与表之间有很多复杂的关联关系。关系型数据库遵循结构化查询语言SQL标准和ACID原则。常见的关系型数据库有MySQL,SQLServer,Oracle等 2.非关系型数据库 NoSQL,Not Only SQL:是分布式、非关系型...

实时数据集成

  企业应用集成 面向服务的体系结构 (SOA) 目前应该是一个很受欢迎的名词,中间件技术人员几乎到了言必称SOA的程度,数据集成当然也不例外,在Oracle openworld2008大会上,就推出了一堆数据集成的专场演讲,其中和SOA结合最紧密的就是实时数据集成 real time data integration。我总结了一下,实时数据集成一般分为两...

Oh my God, Swagger API文档竟然可以这样写?

最好的总会在不经意间出现。 作为后端程序员,免不了与前端同事对接API, 一个书写良好的API设计文档可有效提高与前端对接的效率。 为避免联调时来回撕逼,今天我们聊一聊正确使用Swaager的姿势。 基础Swagger用法 在ConfigureServices配置Swagger文档,在Configure启用中间件 // Install-Package S...