Je suis nouveau à SQL. J'ai cette fonction SQL de travail, mais je voudrais joindre les résultats avec une virgule d'une manière qui ne laisse aucune virgule étrangère si le résultat est vide. J'ai joué avec COALESCE mais je n'ai pas réussi à le faire fonctionner. Des indices ou de l'aide seraient géniaux.
En Python, je ferais ceci:
'abcdef'.join(', ')
Voici la fonction SQL maintenant:
USE [Broadcast] GO /****** Object: UserDefinedFunction [dbo].[MapConsumerAdvice] Script Date: 04/24/2013 14:49:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date, ,> -- Description: <Description, ,> -- ============================================= ALTER FUNCTION [dbo].[MapConsumerAdvice] ( @A as Int, @B as Int, @C as Int, @D as Int, @E as Int, @F as Int, @G as Int, @H as Int ) RETURNS VarChar(20) AS BEGIN DECLARE @Result as VarChar(999) SET @Result = '' IF (@A > 0) SET @Result = @Result + ',' + 'a' IF (@B > 0) SET @Result = @Result + ',' + 'd' IF (@C > 0) SET @Result = @Result + ',' + 'h' IF (@D > 0) SET @Result = @Result + ',' + 'l' IF (@E > 0) SET @Result = @Result + ',' + 'm' IF (@F > 0) SET @Result = @Result + ',' + 'n' IF (@G > 0) SET @Result = @Result + ',' + 's' IF (@H > 0) SET @Result = @Result + ',' + 'v' Return @Result END
Essayer
RETURN SUBSTRING(@Result, 2, LEN(@Result))
ou
RETURN RIGHT(@Result, LEN(@Result)-1)
au lieu de Return @Result
Vous devez vérifier si quelque chose a été assigné.
USE [Broadcast] GO /****** Object: UserDefinedFunction [dbo].[MapConsumerAdvice] Script Date: 04/24/2013 14:49:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date, ,> -- Description: <Description, ,> -- ============================================= ALTER FUNCTION [dbo].[MapConsumerAdvice] ( @A as Int, @B as Int, @C as Int, @D as Int, @E as Int, @F as Int, @G as Int, @H as Int ) RETURNS VarChar(20) AS BEGIN DECLARE @Result as VarChar(999) SET @Result = '' IF (@A > 0) SET @Result = @Result + ',' + 'a' IF (@B > 0) SET @Result = @Result + ',' + 'd' IF (@C > 0) SET @Result = @Result + ',' + 'h' IF (@D > 0) SET @Result = @Result + ',' + 'l' IF (@E > 0) SET @Result = @Result + ',' + 'm' IF (@F > 0) SET @Result = @Result + ',' + 'n' IF (@G > 0) SET @Result = @Result + ',' + 's' IF (@H > 0) SET @Result = @Result + ',' + 'v' IF PATINDEX(',%', @Result) > 1 Set @Result = SUBSTRING(@Result, 2, LEN(@Result)); Return @Result END
append le code ci-dessous à la fin de la fonction,
RETURN REPLACE(@result,',,',',')