时间:2015-11-19 23:17:06

标签: sql sql-server tsql concatenation sql-server-2014

我有一张桌子:

Col1   Col2
---    ---
Bar    Val1
Bar    Val2
Bar    Val3
Foo    Val4
Foo    Val5
Foo    Val6

我需要编写一个输出

的查询
Col1         Col2
---    ----------------
Bar    Val1, Val2, Val3
Foo    Val4, Val5, Val6

我需要将其作为单个查询编写,因此无法使用COALESCE()进行连接,因为它需要使用变量和循环。

我的另一个解决方案是使用递归CTE。但是,我需要连接'Bar'和'Foo'的值。我想到CROSS APPLY但是不知道是否有可能使用CROSS APPLY和递归CTE来实现这个结果。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

$('#editButton').click(function(){
    $('#confirmation-msg').show();
});

答案 1 :(得分:0)

试试这样:

DECLARE @tbl TABLE(Col1 VARCHAR(100),Col2 VARCHAR(100));
INSERT INTO @tbl VALUES
('Bar','Val1')
,('Bar','Val2')
,('Bar','Val3')
,('Foo','Val4')
,('Foo','Val5')
,('Foo','Val6');

SELECT DISTINCT Col1,Concatenated.Col2
FROM @tbl AS tbl
CROSS APPLY(
    SELECT STUFF
    (
        (
            SELECT ', ' + Col2 
            FROM @tbl AS InnerTbl
            WHERE InnerTbl.Col1=tbl.Col1
            FOR XML PATH('')
        )
    ,1,2,'')
) AS Concatenated(Col2)

/* Result
Col1    Col2
Bar Val1, Val2, Val3
Foo Val4, Val5, Val6
*/