Supposons que vous ayez une table qui contient plusieurs valeurs associées à un identifiant unique, par exemple :
<code>+------------+ | Id | Value | +------------+ | 1 | 'A' | |------------| | 1 | 'B' | |------------| | 2 | 'C' | +------------+</code>
Pour obtenir le résultat souhaité en fusionnant les lignes avec le même identifiant en une seule ligne avec la valeur combinée :
<code>+------------+ | Id | Value | +------------+ | 1 | 'AB' | |------------| | 2 | 'C' | +------------+</code>
Dans SQL Server 2005, il est possible d'utiliser des fonctions d'agrégation définies par l'utilisateur. Cette fonction est fournie dans son exemple d'implémentation pour effectuer cette tâche de concaténation de manière transparente.
<code class="language-sql">-- 创建用户定义的聚合函数 CREATE FUNCTION [dbo].[ConcatValues](@array VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @result VARCHAR(MAX) = ''; IF @array IS NOT NULL BEGIN SELECT @result = @result + value FROM STRING_SPLIT(@array, ','); END RETURN @result; END; -- 在查询中使用用户定义的聚合函数 SELECT Id, [dbo].[ConcatValues](STRING_AGG(Value, ',')) AS Value FROM TableName GROUP BY Id;</code>
Avec cette solution, vous pouvez exploiter les fonctions d'agrégation définies par l'utilisateur comme n'importe quelle autre fonction d'agrégation standard, vous permettant de les intégrer de manière transparente dans vos requêtes. Notez que la fonction STRING_SPLIT
est disponible dans SQL Server 2016 et versions ultérieures. Pour SQL Server 2005, vous devez utiliser une autre méthode pour diviser la chaîne, telle qu'une fonction personnalisée ou un curseur. Le code ci-dessus a été mis à jour pour utiliser la fonction STRING_AGG
(SQL Server 2017 et versions ultérieures), offrant une solution plus claire. Pour SQL Server 2005, vous aurez besoin d'une solution personnalisée plus complexe pour émuler les fonctionnalités de STRING_AGG
et STRING_SPLIT
.
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!