您的位置:首页 > 数据库

sqlserver字符串多行合并为一行

2017-12-30 15:43 253 查看
--创建测试表
CREATE TABLE [dbo].[TestRows2Columns](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](50) NULL,
[Subject] [nvarchar](50) NULL,
[Source] [numeric](18,0) NULL
)
GO

--插入测试数据
INSERT INTO [TestRows2Columns] ([UserName],[Subject],[Source])
SELECT N'张三',N'语文',60  UNION ALL
SELECT N'李四',N'数学',70  UNION ALL
SELECT N'王五',N'英语',80  UNION ALL
SELECT N'王五',N'数学',75  UNION ALL
SELECT N'王五',N'语文',57  UNION ALL
SELECT N'李四',N'语文',80  UNION ALL
SELECT N'张三',N'英语',100
GO

SELECT * FROM [TestRows2Columns]

--1 通过 select 累加
DECLARE @sql_col VARCHAR(8000)
SELECT @sql_col = ISNULL(@sql_col + ',','') + QUOTENAME([Subject]) FROM TestRows2Columns
GROUP BY [Subject]

SELECT @sql_col

--2 通过 FOR xml path('') 合并字符串记录
SELECT
STUFF(
(SELECT '#' + Subject
FROM TestRows2Columns
WHERE UserName = '王五'
FOR xml path('')
),1,1,''
)

--3 分组合并字符串记录
SELECT
UserName,
Subject = (
STUFF(
(SELECT '#' + Subject
FROM TestRows2Columns
WHERE UserName = A.UserName
FOR xml path('')
),1,1,''
)
)
FROM TestRows2Columns A
GROUP by UserName
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: