SQL Server中将多行数据拼接为一行数据(一个字符串)
SQL Server中将多行数据拼接为一行数据(一个字符串)
方法一: 使用T-SQL
DECLARE @Users NVARCHAR(MAX)
SET @Users = ''
SELECT @Users = @Users + ',' + UserName FROM dbo.[User]
WHERE RoleID = 1
SELECT @Users
方法二:使用for xml path('') 和stuff
--使用 自连接、for xml path('')和stuff合并显示多行数据到一行中
--注
--1、计算列可以不用包含在聚合函数中而直接显示,如下面语句的val。
--2、for xml path('') 应该应用于语句的最后面,继而生成xml。
--3、for xml path('root')中的path参数是生成的xml最顶级节点。
--4、字段名或是别名将成为xml的子节点,对于没有列名(字段+'')或是没有别名的字段将直接显示。[value] +','则是用,分隔的数据(aa,bb,)。
--5、对于合并多行数据显示为一行数据时使用自连。
--生成测试表并插入测试数据
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
--第一种显示
select id, [val]=(
select [value] +',' from tb as b where b.id = a.id for xml path('')) from tb as a
--第一种显示结果
--1 aa,bb,
--1 aa,bb,
--2 aaa,bbb,ccc,
--2 aaa,bbb,ccc,
--2 aaa,bbb,ccc,
--第二种显示
select id, [val]=(
select [value] +',' from tb as b where b.id = a.id for xml path('')) from tb as a
group by id
--第二种显示结果
--1 aa,bb,
--2 aaa,bbb,ccc,
--第三种显示
select id, [val]=stuff((
select ','+[value] from tb as b where b.id = a.id for xml path('')),1,1,'') from tb as a
group by id
--第三种显示结果
--1 aa,bb
--2 aaa,bbb,ccc
--典型应用
--AMD_GiftNew中获取所有的管理员ID
--select adminIds = stuff((select ','+cast(UserId as varchar) from MM_Users where RoleId = 1 and flag =0 for xml path('')),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 = @PPID group by PPID
相关文章
- SQL Server导入数据报错"无法在只读列“Id”中插入数据",几百个表怎么批量启用'启用标识插入'选项
- 将数据库从Oracle迁移到SQL Server
- SQL Server数据库高级进阶之事务实战演练
- 使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历
- logstash5.5.0同步sql server数据
- C# 连接SQL Server数据库的几种方式--server+data source等方式
- SQL Server账号密码(sa)登录失败 错误原因:233
- SQL server 导入数据 (excel导入到SQL server数据库)
- 【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
- sql server 行转列存储过程
- SQL Server 如何跨服务器复制表中数据
- [SQL] sql server中如何查看执行效率不高的语句
- Sql Server生成测试数据
- Sql Server中sql语句自动换行
- SQL SERVER服务器链接连接(即sql server的跨库连接)
- Oracle与Sql Server复制表结构及数据
- 用户 'sa' 登录失败。原因: 该帐户被禁用。 (Microsoft SQL Server,错误: 18470)
- Oracle与Sql Server复制表结构及数据
- SQL SERVER服务器链接连接(即sql server的跨库连接)
- Atitit 数据join 的原理与java实现 Atitit join表连接的原理与实现 13、SQL Server 表连接的三种方式 (1) Merge Join (2) Nested
- SQL基础【十八、事物】(sql事物慎用,还是写业务逻辑代码好一些,入伙涉及到更换数据啥的很麻烦!)
- mysql 的 if 和 SQL server 的 iif
- 怎么查 ODBC Driver for SQL Server
- sql server保存特殊字符 Ω ♈
- SQL Server GOTO使用实例详解
- Oracle PL/SQL中的循环处理(sql for循环)
- sql server数据库数据查询成功
- SQL Server字符串函数
- SQL Server添加数据
- SQL Server 创建表