Was ist der effizienteste Weg, um Zeichenfolgen in SQL Server zu verketten?

8

Ich habe diesen Code:

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

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

SELECT [Month], Salary FROM @MyTable;

Ausgabe:

Tabellengrafik

Ich möchte das Gehalt (nach Monaten gruppieren) so zusammenfassen, dass es NVARCHARwie folgt aussieht: '2000.3100'

Wie würde ich das effizient machen?

Mischa Zaslavsky
quelle

Antworten:

6

SQL Server vor 2017

versuchen Sie so etwas ..

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;
ughai
quelle
9

Wenn Sie mit SQL Server 2017+ arbeiten, gibt es eine integrierte Funktion, die etwas einfacher zu verwenden ist als eine Unterabfrage mit XML und STUFF usw.

Sie können STRING_AGG verwenden .

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


SELECT p.OwnerUserId, STRING_AGG(p.Score, ', ')                        
                                 WITHIN GROUP (ORDER BY p.Score DESC) AS aggro_order
FROM dbo.Posts AS p
WHERE p.Score > 100
GROUP BY p.OwnerUserId 
Erik Darling
quelle