SQLserver 根据条件将多行合并为一行

Posted 格子衫111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLserver 根据条件将多行合并为一行相关的知识,希望对你有一定的参考价值。

将表和插入模拟数据

CREATE TABLE #TEST(
ID INT,
course VARCHAR(255)
)
INSERT INTO #TEST VALUES(1,'语文')
INSERT INTO #TEST VALUES(2,'数学')
INSERT INTO #TEST VALUES(3,'英语')
INSERT INTO #TEST VALUES(4,'英语')
INSERT INTO #TEST VALUES(4,'英语')
INSERT INTO #TEST VALUES(4,'英语1')

将course合并为一行

SELECT STUFF((
SELECT ',' +  course  FROM #TEST FOR XML PATH('')
),1,1,'') AS 科目


将course合并为一行后,给对应ID,并去掉重复

select ID, name = (stuff((select ',' + course from (SELECT distinct course,ID FROM #TEST) BB where ID =   
a.ID for xml path('')),1,1,'')) from #TEST a group by ID


sql:

select ID,
name = (
stuff(
(select ‘,’ + course from #TEST where ID = a.ID for xml path(‘’)),
1,
1,
‘’
)
) from #TEST a group by ID

关于stuff函数的应用以及 for xml path的应用可参见这两篇文章:
FOR XML PATH
stuff函数

以上是关于SQLserver 根据条件将多行合并为一行的主要内容,如果未能解决你的问题,请参考以下文章

sqlServer 多行合并为一行

SQL Query 根据 ID 将多行合并为一行,同时将其他值保留在同一行中?

sqlserver字符串多行合并为一行

合并R中的多行

怎样将多行数字合并到一行中?

T_SQL 将一列多行数据合并为一行