将所有行推入单行和列

时间:2011-09-09 16:15:50

标签: sql sql-server sql-server-2005

我有以下查询:

SELECT 
    '' + CONVERT(VARCHAR(MAX),c.ClientId) + ','
FROM [dbo].[tblClient] c

这会返回17,000 +行。有没有办法让所有这些行返回1值?例如:

 6A7A24CD-061C-4653-9790-882D90F81E1D,0980722E-6E96-4498-B3BB-BFB4CA60EAC6,etc etc etc.

我正在尝试将其用作测试参数。

2 个答案:

答案 0 :(得分:5)

这对你有用吗?

DECLARE @v VARCHAR(MAX)
SELECT @v = ''

SELECT 
    @v = @v +  CONVERT(VARCHAR(MAX),c.ClientId) + ','
FROM [dbo].[tblClient] c
WHERE c.ClientId IS NOT NULL


SELECT  @v 

注意:请注意,如果添加ORDER BY,则无法保证对其进行排序,在这种情况下使用xml路径,如Remus' answer

中所示

另请参阅:Concatenate Values From Multiple Rows Into One Column Ordered

答案 1 :(得分:4)

本文涵盖了您可以使用的一些技巧:Concatenating Row Values in Transact-SQL。我最喜欢的技术是黑盒XML方法:

SELECT cast(c.ClientId as varchar(20)) + ','
FROM [dbo].[tblClient] c
for xml path(''), type;