webentwicklung-frage-antwort-db.com.de

Wie erstelle ich eine Abfrage mit group_concat in SQL Server

Ich weiß, dass wir in SQL Server die Funktion Group_concat Nicht verwenden können, aber hier ist ein Problem, bei dem ich meine Abfrage Group_Concat Muss. Meine SQL-Abfrage lautet

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 ;

Es gibt mir Ergebnis wie

enter image description here

Schauen Sie sich nur die ersten 3 Zeilen an. In dieser Maskenkennung, Maskenname, Schulkennung, Schulname ist derselbe, aber die Maskendetails sind unterschiedlich. Wünschen Sie sich also eine Zeile für die letzte Spalte, in der alle Maskendetails gemäß Maskenkennung usw. enthalten sein können.

Ich möchte meine Ausgabe mögen

enter image description here

Und so weiter. Bitte helfen Sie mir, während Sie eine Frage dazu stellen.

Danke im Voraus.

100
Rahul

Abfrage:

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

Zusätzliche Informationen:

Zeichenfolgenaggregation in der Welt von SQL Server

134
Devart
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
28
Amit Singh

Dies kann auch mit dem Scalar-Valued Function im MSSQL 2008
Erkläre deine Funktion wie folgt:

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

Und dann wird Ihre letzte Frage wie folgt aussehen

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 ;

Hinweis: Möglicherweise müssen Sie die Funktion ändern, da mir die vollständige Tabellenstruktur nicht bekannt ist.

7

Führen Sie die folgende Abfrage aus, für die in Ihrem Fall STUFF und GROUP BY nicht erforderlich sind:

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
5
roopaliv