将查询结果加入由逗号分隔的单行值

时间:2010-03-02 22:03:00

标签: sql sql-server tsql

  

可能重复:
  SQL Server: Can I Comma Delimit Multiple Rows Into One Column?

我有这样的查询:

SELECT name from users

,结果是许多记录:

1 user1
2 user2
3 user3

我希望将所有这些记录放在一行中用逗号分隔:

user1, user2, user3

如果查询结果为空,则为空行。

如何使用T-SQL获取此内容? UNPIVOT

3 个答案:

答案 0 :(得分:18)

您可以使用COALESCE功能实现此目的:

declare @result varchar(max)

select @result = COALESCE(@result + ', ', '') + name
from users

select @result

这将在sql server 2000及更高版本(也可能是早期版本)中运行。请注意,您在sql server 2000中没有varchar(max)。

在sql server(2005及更高版本)的更高版本中,也可以使用XML Path()

执行此操作
select name + ','
from users
for xml path('')

答案 1 :(得分:1)

你也可以这样做,除了它在显示到DOS shell时没有很好地格式化:

echo Batch file SQL 2005
echo. 
"%PROGRAMFILES%\Microsoft SQL Server\90\Tools\BINN\osql" -S . -E -Q "SELECT name + ', ' FROM sysdatabases order by name for XML PATH('')"

答案 2 :(得分:0)

declare @result varchar(max)
set @result = ''
select @result = @result + name + ',' from users 
if @result <> '' set @result = left(@result,len(@result)-1)
print @result