Heim >Datenbank >MySQL-Tutorial >Wie simuliert ich MySQLs Group_Concat -Funktion in SQL Server 2005?
Frage:
Im Prozess der Migration von MySQL-basierten Anwendungen auf Microsoft SQL Server 2005 muss die Funktionalität der GROUP_CONCAT-Funktion von MySQL repliziert werden. Diese Funktion kombiniert mehrere Zeilen in einer gruppierten Abfrage zu einer einzigen durch Kommas getrennten Zeichenfolge.
Lösung:
Obwohl SQL Server kein natives Äquivalent der Funktion GROUP_CONCAT hat, kann seine Funktionalität mithilfe einer Kombination von Techniken simuliert werden:
Verbindung über XML herstellen:
Eine Möglichkeit besteht darin, XML zu verwenden, um die Zeichenfolgen zu verketten und dann das Ergebnis zu extrahieren:
<code class="language-sql">WITH ConcatenatedXML AS ( SELECT empName, ( SELECT ', ' + projID FROM project_members WHERE empName = e.empName FOR XML PATH('') ) AS projIDs FROM project_members AS e GROUP BY empName ) SELECT empName, SUBSTRING(projIDs, 2, LEN(projIDs) - 2) AS group_concat_result FROM ConcatenatedXML;</code>
Verwenden Sie dynamisches SQL:
Ein anderer Ansatz besteht darin, dynamisch eine Abfrage zu generieren, die den Operator „ “ verwendet, um Zeichenfolgen zu verketten:
<code class="language-sql">DECLARE @SQL NVARCHAR(MAX) = 'SELECT empName, '''; SELECT @SQL = @SQL + ', ' + projID FROM project_members WHERE empName = ( SELECT TOP 1 empName FROM project_members GROUP BY empName HAVING COUNT(*) > 1 ); SET @SQL = @SQL + ''' AS group_concat_result FROM project_members GROUP BY empName;'; EXEC (@SQL);</code>
Benutzerdefinierte Funktion (UDF) verwenden:
Schließlich können Sie eine UDF erstellen, die das Verhalten von GROUP_CONCAT simuliert:
<code class="language-sql">CREATE FUNCTION dbo.group_concat(@table NVARCHAR(MAX), @column NVARCHAR(MAX), @separator NVARCHAR(MAX) = ', ') RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @result NVARCHAR(MAX) = ''; SELECT @result = @result + @separator + @column FROM @table GROUP BY @column; RETURN @result; END;</code>
Diese UDF kann wie folgt verwendet werden:
<code class="language-sql">SELECT empName, dbo.group_concat(projID) AS group_concat_result FROM project_members GROUP BY empName;</code>
Das obige ist der detaillierte Inhalt vonWie simuliert ich MySQLs Group_Concat -Funktion in SQL Server 2005?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!