sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-serveren svarende til GROUP_CONCAT()

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.


  1. Sådan implementeres Percona Distribution til PostgreSQL for høj tilgængelighed

  2. Er dynamiske mysql-forespørgsler med sql-escape lige så sikre som forberedte udsagn?

  3. Oracle:OALL8 er i en inkonsekvent tilstand

  4. Datamigreringer