Dedupe在SQL列中分隔文本

时间:2017-08-23 10:59:39

标签: sql

刚刚考虑过这种情况,其中一列有数据' A,B,C,D,A,B,E,D'应该被删除为“A,B,C,D,E'”。我可以考虑通过分割分隔值,重复数据删除和重新分配来分两步完成。我不确定是否有任何简单的方法来实现这一目标,我是否遗漏了任何明显的东西?

1 个答案:

答案 0 :(得分:1)

在SQL Server上我会做这样的事情(基于this article):

DECLARE @TEXT nvarchar(400) = 'A,B,A,C,D,B,D';
DECLARE @DEDUPTEXT nvarchar(400);
WITH Split(stpos,endpos)
AS(
    SELECT 0 AS stpos, CHARINDEX(',',@text) AS endpos
    UNION ALL
    SELECT endpos+1, CHARINDEX(',',@text,endpos+1)
        FROM Split
        WHERE endpos > 0
)
SELECT @DEDUPTEXT = COALESCE(@DEDUPTEXT+ ',', '') + [Data] 
FROM (
SELECT DISTINCT
    'Data' = SUBSTRING(@text,stpos,COALESCE(NULLIF(endpos,0),LEN(@text)+1)-stpos)
FROM Split ) dedup

SELECT @DEDUPTEXT 

它基本上完成了你在问题中描述的内容。 不确定这对你是否有帮助,请随时关注 - 我最终会将其删除。