如何在sql中选择distinct和concatenate

时间:2010-01-17 15:40:48

标签: sql sql-server-2005

假设我们在SQLServer-2005中有一个包含两列和以下数据行的下表:

Tiger    50
Wolf     4
Tiger    53
Lion     55
Elephant 54
Rhino    52
Lion     5

我们是否可以得到如下结果的SQL查询:Tiger,Wolf,Lion,Elephant,Rhino作为单个字符串varchar输出?是否可能? 使用T-SQL不可能单独使用执行标量的结果在c#中使用结果 提前谢谢。

6 个答案:

答案 0 :(得分:3)

您可以使用for xml path来连接值:

select distinct name + ', ' as [text()]
from @t
for xml path('')

-->
Elephant, Lion, Rhino, Tiger, Wolf, 

如果你不喜欢尾随,,那么最后2个字节的字符串。

不确定为什么你不能使用T-SQL,你可以将它与ExecuteScalar()结合使用就好了。

示例数据:

declare @t table (name varchar(max), id int)
insert into @t 
select 'Tiger', 50
union all select 'Wolf', 4
union all select 'Tiger', 53
union all select 'Lion', 55
union all select 'Elephant', 54
union all select 'Rhino', 52
union all select 'Lion', 5

答案 1 :(得分:1)

答案 2 :(得分:0)

假设您是从ExecuteScalar获取此函数并在C#中使用生成的复合字符串,那么您将最终编写一个sproc,或者只是让您的代码使用数据表。

您能否详细说明为什么不能使用sproc?已经提供了一些可以很好的例子,你仍然可以得到你的标量结果

答案 3 :(得分:0)

将GROUP_CONCAT()与DISTINCT:

一起使用
SELECT GROUP_CONCAT(DISTINCT colName) FROM tblName;

答案 4 :(得分:0)

最有效的方法可能是使用User-Defined Aggregate,但您也可以滥用UPDATE声明:

DECLARE @Result varchar(500)
SET @Result = ''

UPDATE Animals
    SET @Result = @Result + Name + ','

SELECT @Result

答案 5 :(得分:0)

这就是Andomar的答案的实施方式。感谢Andomar的回答得到了一些新的东西。

  

选择不同的summaryColumn +','   作为[table()的[text()]   xml路径('')