删除sql单元格中的重复数字

删除sql单元格中的重复数字,sql,teradata,Sql,Teradata,我是SQL的初学者。使用Teradata 我需要删除SQL单元格中的重复数字 例如: In: 1, 2, 3, 4, 5, 2, 3, 6 Out: 1, 2, 3, 4, 5, 6 我在一列中有超过一百万个类似的单元格 我不熟悉teradata sql,但我认为此解决方案可能有效: 在此之后,可以使用光标连接行。您可以查看以了解更多信息。例如,您可以试试这个 注意:您可以使用分隔符分割数据 SQL查询 输出 这是多种方法的混合体,假设您启用了XML服务。我没有TD系统可供测试,因此它可能会

我是SQL的初学者。使用Teradata

我需要删除SQL单元格中的重复数字

例如:

In: 1, 2, 3, 4, 5, 2, 3, 6

Out: 1, 2, 3, 4, 5, 6
我在一列中有超过一百万个类似的单元格 我不熟悉teradata sql,但我认为此解决方案可能有效:


在此之后,可以使用光标连接行。您可以查看以了解更多信息。

例如,您可以试试这个

注意:您可以使用分隔符分割数据

SQL查询

输出


这是多种方法的混合体,假设您启用了XML服务。我没有TD系统可供测试,因此它可能会工作,也可能会有很多不工作,但希望它能为您提供一个起点:

使用cte 选择行号作为id,MyCol作为str-为每行指定一个id 从MyTable 选择 修剪 尾随 XMLAGGsrc.token | |','ORDER BY src.token VARCHAR10000 从…起 选择d.outkey,d.token 从桌子上 STRTOK_分割_至_TABLEcte.id,cte.str,',' 返回outkey整数、tokennum整数、token varchar10 as d 按输出密钥分组,令牌-删除重复条目 src 按src.outkey分组-生成新值 ; 其思想是拆分逗号分隔的值,删除重复项,然后使用新的消除重复的值重新构建分隔字符串。以下是一些参考资料:


通常,在一个单元格3NF和friends中有多个值是不好的样式…-但是您可以在以后使用STRTOK或CSV函数来应用它
对于这个结果,您可以应用一个简单的distinct。

这在SQL数据库中很难实现。Teradata的设置更能满足这一要求,数据规范化,每个CSV值都在一个单独的记录中。意大利式馄饨16.20.32.17谢谢你的数据。不,我的意思是在一个cellOk中重复值,如果您使用SQL Server 2016,您可以使用STRING_SPLIT函数将所有逗号分隔的值放置在行中,并使用简单的SELECT DISTINCT筛选它们。问题有一个标记,不是。我不确定我只是在创建一个示例。
SELECT DISTINCT CellValue 
FROM TABLE (STRTOK_SPLIT_TO_TABLE('tmp_test', 'Your SQL Cell String', ',')
 RETURNS 
(
  Outkey VARCHAR(10) CHARACTER SET UNICODE
 ,CellValue VARCHAR(10) CHARACTER SET UNICODE)
 ) AS dt
    DECLARE @String VARCHAR(MAX) = '1, 2, 3, 4, 5, 2, 3, 6';
    DECLARE @Delimiter CHAR(1) = ','
    DECLARE @temptable TABLE(Items VARCHAR(255))
    DECLARE @idx INT
    DECLARE @slice VARCHAR(MAX)

    SELECT @idx = 1
        IF LEN(@String)<1 OR @String IS NULL  RETURN

    WHILE @idx!= 0
    BEGIN
        SET @idx = CHARINDEX(@Delimiter,@String)
        IF @idx!=0
            SET @slice = LEFT(@String,@idx - 1)
        ELSE
            SET @slice = @String

        IF(LEN(@slice)>0)
            INSERT INTO @temptable(Items) VALUES(TRIM(@slice))

        SET @String = RIGHT(@String,LEN(@String) - @idx)
        IF LEN(@String) = 0 BREAK       
    END 

    SELECT (STUFF((SELECT DISTINCT ', ' +  Items From @temptable FOR XML PATH('')),1,2,''))