Come creare una query con group_concat in sql server

So che in sql server non possiamo usare la funzione Group_concat ma qui c’è un problema in cui ho bisogno di Group_Concat mia query.Io google ha trovato un po ‘di logica ma non è in grado di correggerlo. La mia query 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 ; 

Mi dà risultato come

inserisci la descrizione dell'immagine qui

Guarda solo le prime 3 righe In quel maskid, maskname, schoolid, schoolname è lo stesso ma maskdetail è diverso quindi vuoi una riga per quello in cui l’ultima colonna può contenere tutti i maskdetails come per maskid e così via.

Voglio la mia uscita come

inserisci la descrizione dell'immagine qui

E così via. Per favore aiutatemi mentre faccio una domanda per quello.

Grazie in anticipo.

Query:

 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 

Informazioni aggiuntive:

Aggregazione di stringhe nel mondo di SQL Server

 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 

Questo può essere ottenuto anche utilizzando la Scalar-Valued Function in MSSQL 2008
Dichiara la tua funzione come segue,

 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 [email protected] RETURN @SchoolName END 

E poi la tua domanda finale sarà come

 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 ; 

Nota: potrebbe essere necessario modificare la funzione, in quanto non conosco la struttura completa della tabella.

Si prega di eseguire la query sottostante, non richiede STUFF e GROUP BY nel tuo caso:

 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