comment combiner les valeurs de plusieurs colonnes et supprimer les doublons à l'aide de transact sql
Rumi
J'ai une table dans la base de données de serveur sql ayant quatre colonnes pour les adresses e-mail, c'est-à-dire Email1,Email2,Email3
et Email4
. J'ai besoin de créer une fonction pour renvoyer des adresses e-mail combinées et supprimer les e-mails en double
(par exemple, Email1 et Email3 peuvent avoir la même adresse [email protected]
et je n'ai besoin de l'inclure qu'une seule fois dans la chaîne combinée).
J'ai écrit une fonction comme ci-dessous qui renvoie les valeurs combinées mais je ne sais pas comment nous pouvons supprimer les e-mails en double.
Create FUNCTION [dbo].[CombineAndCommaSeparateEmails]
(@Email1 VARCHAR(250),@Email2 VARCHAR(250),@Email3 VARCHAR(250),@Email4 VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @combinedEmails VARCHAR(1000)
Set @combinedEmails=
concat(
Rtrim(Ltrim(Case when @EMAIL1 is not null then @EMAIL1+',' end)),
Rtrim(Ltrim(Case when @EMAIL2 is not null then @EMAIL2+',' end)),
Rtrim(Ltrim(Case when @EMAIL3 is not null then @EMAIL3+',' end)),
Rtrim(Ltrim(@EMAIL4)))
Set @combinedEmails= case
when RIGHT(@combinedEmails,1)=',' then substring(@combinedEmails,1,len(@combinedEmails)-1)
else @combinedEmails END
RETURN @combinedEmails
END
Des idées? Merci
John Cappelletti
Une autre option (si vous souhaitez conserver l'UDF)
Declare @EMail1 varchar(50) = '[email protected]'
Declare @EMail2 varchar(50) = '[email protected]'
Declare @EMail3 varchar(50) = '[email protected]'
Declare @EMail4 varchar(50) = '[email protected]'
Select Stuff((Select Distinct ','+EMails From (values (@EMail1),(@EMail2),(@EMail3),(@EMail4) ) A (EMails) For XML Path('')),1,1,'')
Retour
[email protected],[email protected]
En tant que fonction
Create FUNCTION [dbo].[CombineAndCommaSeparateEmails] (@Email1 VARCHAR(250),@Email2 VARCHAR(250),@Email3 VARCHAR(250),@Email4 VARCHAR(250))
Returns varchar(250)
AS
BEGIN
Return (
Select Stuff((Select Distinct ','+EMails
From (values (@EMail1)
,(@EMail2)
,(@EMail3)
,(@EMail4)
) A (EMails)
Where EMails<>''
For XML Path('')),1,1,'')
)
End
Donc
Select [dbo].[CombineAndCommaSeparateEmails]('[email protected]','[email protected]','[email protected]',null)
Retour
[email protected],[email protected]