SQL列中的重复数据消除分隔文本

SQL列中的重复数据消除分隔文本,sql,Sql,刚才考虑过这种情况,其中包含数据“a,B,C,D,a,B,E,D”的列应作为“a,B,C,D,E”进行重复数据消除。我可以考虑分两步来完成这项工作,即分割分隔值、重复数据消除和重新缝合。我不确定是否有任何简单的方法可以实现这一点,我是否遗漏了任何明显的内容?在SQL Server上,我会这样做(基于): 它基本上就是你在问题中所描述的。 不确定这是否对您有帮助,请随意否决投票-我最终会删除它。您应该修复数据结构,而不是将值列表存储为字符串。每个值都应该在连接表中的单独一行上。这是一个很好的例子,

刚才考虑过这种情况,其中包含数据“a,B,C,D,a,B,E,D”的列应作为“a,B,C,D,E”进行重复数据消除。我可以考虑分两步来完成这项工作,即分割分隔值、重复数据消除和重新缝合。我不确定是否有任何简单的方法可以实现这一点,我是否遗漏了任何明显的内容?

在SQL Server上,我会这样做(基于):

它基本上就是你在问题中所描述的。
不确定这是否对您有帮助,请随意否决投票-我最终会删除它。

您应该修复数据结构,而不是将值列表存储为字符串。每个值都应该在连接表中的单独一行上。这是一个很好的例子,说明了为什么在列中存储CSV数据通常是一个坏主意:这会使处理数据变得非常困难。对你来说,最好的长期解决办法是规范化你的数据。我同意,这不是真实的情况。我只是想知道是否有什么办法可以解决这个问题。问题:您使用的是哪种数据库?您能保证字母总是按字母顺序排序吗?这是WX2(ANSI SQL)格式,数据没有预排序。感谢您演示答案。我仍然对其他方式持开放态度
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