删除sql单元格中的重复数字
我是SQL的初学者。使用Teradata 我需要删除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系统可供测试,因此它可能会
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,''))