将列的所有行连接成单个值

时间:2013-09-02 08:25:18

标签: sql sql-server sql-server-2008 tsql

我有一张名为Rule的表。

RuleId    Name
1          A1
2          A2
3          A3
.
.
.

现在我希望所有的名字都是单一的结果。

可能像@allnames = A1,A2,A3

有人可以建议如何在不使用循环的情况下为此编写查询吗?

提前致谢...

3 个答案:

答案 0 :(得分:5)

试试这个:

SELECT @allnames = STUFF((SELECT distinct ',' + Name
                      FROM table1
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                        , 1, 1, '');

答案 1 :(得分:4)

DECLARE @names NVARCHAR(MAX)

SELECT @names = coalesce(@names + ',', '') + coalesce(Name, '') 
FROM (SELECT distinct Name FROM Rule) x

print @names

答案 2 :(得分:3)

试试这个 -

DECLARE @temp TABLE ([RuleId] INT, Name CHAR(2))
INSERT INTO @temp([RuleId], Name)
VALUES
    (1, 'A1'),
    (2, 'A2'),
    (3, 'A3')

DECLARE @all_names NVARCHAR(MAX)

SELECT @all_names = STUFF((
    SELECT DISTINCT ',' + Name
    FROM @temp
    --ORDER BY Name
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

SELECT @all_names

输出 -

---------------
A1,A2,A3