Voordat SQL Server 2017 kwam, was er geen T-SQL-equivalent van de MySQL GROUP_CONCAT()
functie. Met deze functie kunt u een resultatenset retourneren als een door komma's gescheiden lijst, in plaats van elke rij als een afzonderlijke rij weer te geven (zoals bij een normale resultatenset).
Als u vóór SQL Server 2017 uw resultaat in een door komma's gescheiden lijst wilde plaatsen, moest u een tijdelijke oplossing vinden, misschien met een combinatie van STUFF()
, FOR XML
, en PATH()
.
T-SQL heeft nu echter de STRING_AGG()
functie die beschikbaar is vanaf SQL Server 2017. Deze functie doet vrijwel hetzelfde als MySQL's GROUP_CONCAT()
functie (met enkele kleine verschillen).
Syntaxis
De syntaxis van de STRING_AGG()
functie gaat als volgt:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Waar expression
is een uitdrukking van elk type. Expressies worden geconverteerd naar NVARCHAR
of VARCHAR
typen tijdens aaneenschakeling. Niet-tekenreekstypen worden geconverteerd naar NVARCHAR
typ.
Waarbij het scheidingsteken een uitdrukking is van NVARCHAR
of VARCHAR
type dat wordt gebruikt als scheidingsteken voor aaneengeschakelde tekenreeksen. Het kan letterlijk of variabel zijn.
De (optionele) orderclausule bestaat uit WITHIN GROUP
gevolgd door ORDER BY ASC
of ORDER BY DESC
tussen haakjes. ASC
bestelt het resultaat in oplopende volgorde. Dit is de standaardwaarde. DESC
bestelt het resultaat in aflopende volgorde.
Voorbeeld
Hier is een snel voorbeeld van de STRING_AGG()
functie:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
Resultaat:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Zoals u kunt zien, wordt de resultatenset weergegeven als een door komma's gescheiden lijst. Dit komt omdat ons tweede argument een komma is, wat aangeeft dat een komma als scheidingsteken moet worden gebruikt.
Hier is dezelfde resultatenset, maar zonder de STRING_AGG()
functie:
SELECT Genre AS Result FROM Genres;
Resultaat:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Dus gewoon een normale resultatenset.
Zie Queryresultaten retourneren als een door komma's gescheiden lijst in SQL Server voor meer voorbeelden, zoals groeperen, omgaan met null-waarden en het ordenen van de resultaten.