SQL Server选择DISTINCT记录为字符串变量

时间:2016-10-15 06:04:55

标签: sql-server distinct

我想从人员表中选择所有不同的名称到VARCHAR变量。 我编写了一个返回所有名称的查询,如下所示。

DECLARE @pName as VARCHAR(MAX)
SET @pName=''

SELECT @pName += RTRIM(FullName) + ',' 
FROM Persons 

SELECT @pName

当我尝试在FullName上选择distinct时,SQL Server会抛出异常。

DECLARE @pName as VARCHAR(MAX)
SET @pName=''

SELECT DISTINCT FullName, @pName += RTRIM(FullName) + ',' 
FROM Persons 

SELECT @pName
  

Msg 141,Level 15,State 1,Line 3
  为变量赋值的SELECT语句不能与数据检索操作结合使用。

对变量名称的区别只返回第一个名称

SELECT DISTINCT @pName += RTRIM(FullName) +
FROM Persons 

SELECT @pName

如何从SELECT语句中选择不同的名称到字符串变量?

提前致谢

2 个答案:

答案 0 :(得分:1)

您也可以在不使用变量的情况下获得相同的结果。

SELECT STUFF((SELECT distinct ',' + FullName FROM Persons
              FOR xml path ('')
             ), 1, 1, '')

使用变量 - 添加group By

DECLARE @pName as VARCHAR(MAX)
set @pName=''
SELECT    @pName+= RTRIM(FullName) + ',' FROM Persons Group By FullName
select @pName

答案 1 :(得分:1)

DECLARE @pName as VARCHAR(MAX)
with cte as(
SELECT DISTINCT FullName FROM Persons
) 
Select @pName = coalesce(@pName + ', ', '') + FullName 
from cte

select @pName