我有一个名为“Mergecodes”的列,其中包含用逗号分隔的字符(或对)。一些条目包含需要删除的倍数。这是一个示例,其中“KD”是重复的,因此需要删除一个:“ T, M, KD, SB, KD ”。我想这可以通过计算出现的次数来实现,如果它包含多个,删除额外的。我只是不确定这个的语法。任何帮助将不胜感激。谢谢!
更新
正如@Yaroslav 建议的那样,当我使用字符串('T,M,KD,SB,KD')时,我能够得到结果,但是当我使用列而不是字符串时,我没有得到任何结果。有任何想法吗?
declare @str varchar(100)
select @str = mergecodes from GoldMineTest.dbo.CONTACT1
declare @separator varchar(1)= ','
;WITH tokens(p, a, b) AS
(
SELECT 1, 1, CHARINDEX(@separator, @str)
UNION ALL
SELECT p + 1, b + 1, CHARINDEX(@separator, @str, b + 1)
FROM tokens
WHERE b > 0
)
SELECT SUBSTRING(@str, a, CASE WHEN b > 0 THEN b-a ELSE 4000 END) AS Separated_values, count(SUBSTRING(@str, a, CASE WHEN b > 0 THEN b-a ELSE 4000 END))
FROM tokens
GROUP BY SUBSTRING(@str, a, CASE WHEN b > 0 THEN b-a ELSE 4000 END)
HAVING count(SUBSTRING(@str, a, CASE WHEN b > 0 THEN b-a ELSE 4000 END))=1