Innan SQL Server 2017 kom fanns det inte en T-SQL-motsvarighet till MySQL GROUP_CONCAT()
fungera. Denna funktion låter dig returnera en resultatuppsättning som en kommaseparerad lista, i motsats till att lista varje rad som en separat rad (som med en normal resultatuppsättning).
Före SQL Server 2017, om du vill lägga ditt resultat i en kommaseparerad lista, måste du hitta en lösning, kanske med en kombination av STUFF()
, FOR XML
och PATH()
.
Men T-SQL har nu STRING_AGG()
funktion som är tillgänglig från SQL Server 2017. Denna funktion gör ungefär samma sak som MySQL:s GROUP_CONCAT()
funktion (med några mindre skillnader).
Syntax
Syntaxen för STRING_AGG()
funktionen går så här:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Där expression
är ett uttryck av alla slag. Uttryck konverteras till NVARCHAR
eller VARCHAR
typer under sammanlänkning. Icke-strängtyper konverteras till NVARCHAR
typ.
Där separator är ett uttryck för NVARCHAR
eller VARCHAR
typ som används som separator för sammanlänkade strängar. Det kan vara bokstavligt eller variabelt.
Ordningssatsen (valfritt) består av WITHIN GROUP
följt av ORDER BY ASC
eller ORDER BY DESC
inom parantes. ASC
beställer resultatet i stigande ordning. Detta är standardvärdet. DESC
beställer resultatet i fallande ordning.
Exempel
Här är ett snabbt exempel på STRING_AGG()
funktion:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
Resultat:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Som du kan se är resultatuppsättningen listad som en kommaseparerad lista. Detta beror på att vårt andra argument är ett kommatecken, som anger att ett kommatecken ska användas som avgränsare.
Här är samma resultatuppsättning men utan STRING_AGG()
funktion:
SELECT Genre AS Result FROM Genres;
Resultat:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Så bara ett normalt resultat.
För fler exempel, såsom gruppering, hantering av nollvärden och ordning av resultaten, se Hur man returnerar frågeresultat som en kommaseparerad lista i SQL Server.