Question :
Dans le processus de migration des applications basées sur MySQL vers Microsoft SQL Server 2005, la fonctionnalité de la fonction GROUP_CONCAT de MySQL doit être répliquée. Cette fonction combine plusieurs lignes d'une requête groupée en une seule chaîne séparée par des virgules.
Solution :
Bien que SQL Server ne dispose pas d'équivalent natif de la fonction GROUP_CONCAT, sa fonctionnalité peut être simulée à l'aide d'une combinaison de techniques :
Connectez-vous en utilisant XML :
Une solution consiste à utiliser XML pour concaténer les chaînes, puis à extraire le résultat :
<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>
Utiliser le SQL dynamique :
Une autre approche consiste à générer dynamiquement une requête qui utilise l'opérateur " " pour concaténer des chaînes :
<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>
Utiliser la fonction définie par l'utilisateur (UDF) :
Enfin, vous pouvez créer une UDF qui simule le comportement de GROUP_CONCAT :
<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>
Cet UDF peut être utilisé comme suit :
<code class="language-sql">SELECT empName, dbo.group_concat(projID) AS group_concat_result FROM project_members GROUP BY empName;</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!