在 SQL Server 中连接字符串的最有效方法是什么?

Mis*_*sky 9 sql-server aggregate t-sql concat

我有这个代码:

DECLARE @MyTable AS TABLE
(
   [Month] INT,
   Salary INT
);

INSERT INTO @MyTable VALUES (1,2000), (1,3100);

SELECT [Month], Salary FROM @MyTable;
Run Code Online (Sandbox Code Playgroud)

输出:

表格图形

我想NVARCHAR合并工资(按月分组),这样它就会是这样的:'2000,3100'

我将如何有效地做到这一点?

Eri*_*ing 10

如果您使用的是 SQL Server 2017+,则有一个内置函数比使用 XML 和 STUFF 等的子查询更易于使用。

您可以使用STRING_AGG

SELECT 
    p.OwnerUserId, 
    aggro = 
        STRING_AGG
        (
            p.Score, 
            ', '
        )
FROM dbo.Posts AS p
WHERE p.Score > 100
GROUP BY p.OwnerUserId


SELECT 
    p.OwnerUserId, 
    aggro_order = 
        STRING_AGG
        (
            p.Score, 
            ', '
        )                        
        WITHIN GROUP 
        (
            ORDER BY 
                p.Score DESC
         )
FROM dbo.Posts AS p
WHERE p.Score > 100
GROUP BY p.OwnerUserId 
Run Code Online (Sandbox Code Playgroud)


ugh*_*hai 7

2017 年之前的 SQL Server

尝试这样的事情..

DECLARE @MyTable AS TABLE
(
   [Month] INT,
   Salary INT
);

INSERT INTO @MyTable VALUES (1,2000), (1,3100);


SELECT [Month],
    STUFF((
    SELECT ',' + CONVERT(NVARCHAR(30),Salary)
    from @MyTable
    WHERE Month = out.Month
    FOR XML Path(''))
    ,1,1,'') csv
 FROM @MyTable out
 GROUP BY Month;
Run Code Online (Sandbox Code Playgroud)