SQL中一列的不同逗号分隔值

SQL中一列的不同逗号分隔值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在SQL中有一个查询,返回以下结果: Id language 1. English, French, spanish 2. English, English, spanish 3. French, French, English 我不希望语言有重复值,因此如果我有两种英语语言,我只需要显示一种,因此结果应该如下所示: Id language 1. English, French, spanish 2. English, spanish 3. French, English 如何在SQL中实

我在SQL中有一个查询,返回以下结果:

Id language
1. English, French, spanish
2. English, English, spanish
3. French, French, English
我不希望语言有重复值,因此如果我有两种英语语言,我只需要显示一种,因此结果应该如下所示:

Id language
1. English, French, spanish
2. English, spanish
3. French, English
如何在SQL中实现这一点?


现在,它可以很好地进行排序并获得不同的值:

declare @temp table (Id int,languag nvarchar(33))

insert into @temp values (1,'English, French, spanish')
insert into @temp values (2,'English, English, spanish')
insert into @temp values (3,'French, French, English')
insert into @temp values (4,'English, English, English')

select Id,
REPLACE( cast(cast('<d>'+ replace(languag, ', ','</d><d>')+'</d>'  as xml)
.query('for $a in distinct-values(/d) order by $a return $a') as varchar), ' ', ', ')AS [language]
from @temp
declare@temp表(Id int,languag nvarchar(33))
在@temp值中插入(1,'English,French,spanish')
在@temp值中插入(2,'English,English,spanish')
在@temp值中插入(3,'French,French,English')
在@temp值中插入(4,'English,English,English')
选择Id,
替换(cast(cast(“”+REPLACE(languag),“”,“”)+作为xml)
.query($a的不同值(/d)按$a的顺序返回$a)作为varchar),“,”)作为[language]
来自@temp

感谢@tinka

语言
表中以逗号分隔的列吗?yoiu能否向我们显示表结构和返回结果的查询?是的,它以逗号分隔的形式保存在表中第一个错误-逗号分隔的值。第二个错误-值更新时,那一刻,你应该进行验证。避免重复值。第三个错误数据冗余,即db设计错误。感谢@lad2025,从上个月开始,你一直在摇摆:):p总是有几种方法可以惩罚一只猫,但tinka的解决方案很优雅,因为它几乎是一条线性关系。几乎可以肯定,任何其他内容都至少需要两条语句,一条用于解析逗号分隔的字符串,另一条用于相应地重新解析它。谢谢,如果我添加了这一行:
插入@temp values(4,'English,English,English')
查询返回“English,English”,我只需要一行。还有一件事,在得到不同的结果之前,有没有办法对这些值进行排序?
select Id,
REPLACE(cast(cast('<d>'+ replace(languag, ', ','</d><d>')+'</d>'  as xml)
.query('distinct-values(/d)') as varchar), ' ', ', ')AS [language]
from @temp;
declare @temp table (Id int,languag nvarchar(33))

insert into @temp values (1,'English, French, spanish')
insert into @temp values (2,'English, English, spanish')
insert into @temp values (3,'French, French, English')
insert into @temp values (4,'English, English, English')

select Id,
REPLACE( cast(cast('<d>'+ replace(languag, ', ','</d><d>')+'</d>'  as xml)
.query('for $a in distinct-values(/d) order by $a return $a') as varchar), ' ', ', ')AS [language]
from @temp