如何在sql server中使用group_concat进行查询

我知道,在SQL Server中,我们不能使用Group_concat函数,但这里有一个问题,我有我需要Group_Concat我的query.I谷歌它发现了一些逻辑,但无法纠正它。我的SQL查询是

 select m.maskid,m.maskname,m.schoolid,s.schoolname, md.maskdetail from tblmask m join school s on s.id = m.schoolid join maskdetails md on m.maskid = md.maskid order by m.maskname ; 

它给了我像结果一样

在这里输入图像描述

只看前面3行在这个maskid中,maskname,schoolid,schoolname是一样的,但是maskdetail是不同的,所以想要一行的最后一列可以包含所有的maskdetails作为每个maskid等等。

我想要我的输出

在这里输入图像描述

等等。所以请在帮助我的同时查询。

提前致谢。

查询:

 SELECT m.maskid , m.maskname , m.schoolid , s.schoolname , maskdetail = STUFF(( SELECT ',' + md.maskdetail FROM dbo.maskdetails md WHERE m.maskid = md.maskid FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') FROM dbo.tblmask m JOIN dbo.school s ON s.ID = m.schoolid ORDER BY m.maskname 

附加信息:

SQL Server世界中的string聚合

 Select A.maskid , A.maskname , A.schoolid , B.schoolname , STUFF(( SELECT ',' + T.maskdetail FROM dbo.maskdetails T WHERE A.maskid = T.maskid FOR XML PATH('')), 1, 1, '') as maskdetail FROM dbo.tblmask A JOIN dbo.school B ON B.ID = A.schoolid Group by A.maskid , A.maskname , A.schoolid , B.schoolname 

请运行下面的查询,它不需要你的情况下的STUFF和GROUP BY:

 Select A.maskid , A.maskname , A.schoolid , B.schoolname , CAST(( SELECT T.maskdetail+',' FROM dbo.maskdetails T WHERE A.maskid = T.maskid FOR XML PATH(''))as varchar(max)) as maskdetail FROM dbo.tblmask A JOIN dbo.school B ON B.ID = A.schoolid 

这也可以使用MSSQL 2008Scalar-Valued Function来实现
声明你的function如下,

 CREATE FUNCTION [dbo].[FunctionName] (@MaskId INT) RETURNS Varchar(500) AS BEGIN DECLARE @SchoolName varchar(500) SELECT @SchoolName =ISNULL(@SchoolName ,'')+ MD.maskdetail +', ' FROM maskdetails MD WITH (NOLOCK) AND MD.MaskId=@MaskId RETURN @SchoolName END 

然后你的最终查询将是

 SELECT m.maskid,m.maskname,m.schoolid,s.schoolname, (SELECT [dbo].[FunctionName](m.maskid)) 'maskdetail' FROM tblmask m JOIN school s on s.id = m.schoolid ORDER BY m.maskname ; 

注意:您可能必须更改该函数,因为我不知道完整的表结构。