T_SQL 将一列多行数据合并为一行
2014-10-16 11:17
375 查看
转自:http://www.cnblogs.com/smalleyes/archive/2012/03/08/2385658.html
SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象。
Table:SC
期望得到的结果:
IF OBJECT_ID(N'SC') IS NOT NULL
BEGIN
DROP TABLE SC
END
ELSE
BEGIN
CREATE TABLE SC
(
Student NVARCHAR(50),
Course NVARCHAR(50)
)
INSERT INTO SC
SELECT N'张三',N'大学语文' UNION ALL
SELECT N'李四',N'大学语文' UNION ALL
SELECT N'张三',N'书法鉴赏' UNION ALL
SELECT N'张三',N'音乐赏析' UNION ALL
SELECT N'李四',N'电影赏析'
END
GO
(5 row(s) affected)
s
方法一:用户自定义函数
CREATE FUNCTION FN_Merge (@Student NVARCHAR(50))
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @Course NVARCHAR(50)
SELECT @Course = ISNULL(@Course + ',','') + @Course
FROM SC
WHERE Student = @Student
RETURN @COURSE
END
SELECT DISTINCT [Student]
,dbo.FN_Merge([Student]) AS Course
FROM [dbo].[SC]
结果:
(2 row(s) affected)
方法二:FOR XML PATH
SELECT DISTINCT [Student]
,STUFF(
(
SELECT ','+[Course]
FROM [dbo].[SC]
WHERE Student = A.Student
FOR XML PATH('')
)
,1,1,''
)AS Course
FROM [dbo].[SC] AS A
结果:
(2 row(s) affected)
链接:
FOR XML PATH语句的应用http://it.dianping.com/sql-for-xml-path.htm
Stuff()函数http://msdn.microsoft.com/zh-cn/library/ms188043.aspx
SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象。
Table:SC
Student | Course |
张三 | 大学语文 |
李四 | 大学语文 |
张三 | 书法鉴赏 |
张三 | 音乐欣赏 |
李四 | 电影赏析 |
Student | Course |
张三 | 大学语文,书法鉴赏,音乐欣赏 |
李四 | 大学语文,电影赏析 |
BEGIN
DROP TABLE SC
END
ELSE
BEGIN
CREATE TABLE SC
(
Student NVARCHAR(50),
Course NVARCHAR(50)
)
INSERT INTO SC
SELECT N'张三',N'大学语文' UNION ALL
SELECT N'李四',N'大学语文' UNION ALL
SELECT N'张三',N'书法鉴赏' UNION ALL
SELECT N'张三',N'音乐赏析' UNION ALL
SELECT N'李四',N'电影赏析'
END
GO
(5 row(s) affected)
s
方法一:用户自定义函数
CREATE FUNCTION FN_Merge (@Student NVARCHAR(50))
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @Course NVARCHAR(50)
SELECT @Course = ISNULL(@Course + ',','') + @Course
FROM SC
WHERE Student = @Student
RETURN @COURSE
END
SELECT DISTINCT [Student]
,dbo.FN_Merge([Student]) AS Course
FROM [dbo].[SC]
结果:
(2 row(s) affected)
方法二:FOR XML PATH
SELECT DISTINCT [Student]
,STUFF(
(
SELECT ','+[Course]
FROM [dbo].[SC]
WHERE Student = A.Student
FOR XML PATH('')
)
,1,1,''
)AS Course
FROM [dbo].[SC] AS A
结果:
(2 row(s) affected)
链接:
FOR XML PATH语句的应用http://it.dianping.com/sql-for-xml-path.htm
Stuff()函数http://msdn.microsoft.com/zh-cn/library/ms188043.aspx
相关文章推荐
- T_SQL 将一列多行数据合并为一行
- SQL 将一列多行数据合并为一行 FOR XML PATH
- T_SQL 将一列多行数据合并为一行
- T_SQL 将一列多行数据合并为一行
- Spark SQL/Hive 同一列的多行记录合并为一行
- T-SQL中多行数据合并到一行(note)
- sqlserver中,如何把一列中的多行数据在一行显示
- sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果
- SQL不重复查找数据及把一列多行内容拼成一行
- SQL将一列多行数据合并
- SQL 语句行数据拆成多行及多行数据合并成一行的方法
- sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果
- sql 多行转多列,多行转一列合并数据,列转行
- MS-SQL 多行数据合并为一行
- 简单实用SQL脚本Part:sql多行转为一列的合并问题
- Sql Server里巧用Case将多行显示的数据合并为一行显示
- 关于多行合并成一行的SQL查询语句
- (转载)SQL 2005 当我们想将某个字段相同的几行数据合并为一列显示的时候 合并列值
- 简单实用SQL脚本Part:sql多行转为一列的合并问题
- Oracle多行数据合并一行.sql