Før SQL Server 2017 kom, var der ikke en T-SQL-ækvivalent til MySQL GROUP_CONCAT()
fungere. Denne funktion giver dig mulighed for at returnere et resultatsæt som en kommasepareret liste, i modsætning til at angive hver række som en separat række (som med et normalt resultatsæt).
Før SQL Server 2017, hvis du ville placere dit resultat i en kommasepareret liste, skulle du finde en løsning, måske ved at bruge en kombination af STUFF()
, FOR XML
og PATH()
.
Men T-SQL har nu STRING_AGG()
funktion som er tilgængelig fra SQL Server 2017. Denne funktion gør stort set det samme som MySQL's GROUP_CONCAT()
funktion (med nogle mindre forskelle).
Syntaks
Syntaksen for STRING_AGG()
funktionen går sådan her:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Hvor expression
er et udtryk af enhver type. Udtryk konverteres til NVARCHAR
eller VARCHAR
typer under sammenkædning. Ikke-strengtyper konverteres til NVARCHAR
type.
Hvor separator er et udtryk for NVARCHAR
eller VARCHAR
type, der bruges som separator for sammenkædede strenge. Det kan være bogstaveligt eller variabelt.
Den (valgfri) ordenssætning består af WITHIN GROUP
efterfulgt af ORDER BY ASC
eller ORDER BY DESC
i parentes. ASC
bestiller resultatet i stigende rækkefølge. Dette er standardværdien. DESC
bestiller resultatet i faldende rækkefølge.
Eksempel
Her er et hurtigt eksempel 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, er resultatsættet opført som en kommasepareret liste. Dette skyldes, at vores andet argument er et komma, som specificerer, at et komma skal bruges som skilletegn.
Her er det samme resultatsæt, men uden STRING_AGG()
funktion:
SELECT Genre AS Result FROM Genres;
Resultat:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Så bare et normalt resultatsæt.
For flere eksempler, såsom gruppering, håndtering af nulværdier og bestilling af resultaterne, se Sådan returneres forespørgselsresultater som en kommasepareret liste i SQL Server.