Prima dell'arrivo di SQL Server 2017, non esisteva un equivalente T-SQL di MySQL GROUP_CONCAT()
funzione. Questa funzione ti consente di restituire un set di risultati come un elenco separato da virgole, invece di elencare ogni riga come una riga separata (come con un normale set di risultati).
Prima di SQL Server 2017, se si desidera inserire il risultato in un elenco separato da virgole, è necessario trovare una soluzione alternativa, magari utilizzando una combinazione di STUFF()
, FOR XML
e PATH()
.
Tuttavia, T-SQL ora ha il STRING_AGG()
funzione disponibile da SQL Server 2017. Questa funzione fa praticamente la stessa cosa di GROUP_CONCAT()
di MySQL funzione (con alcune piccole differenze).
Sintassi
La sintassi di STRING_AGG()
la funzione va così:
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
Dove expression
è un'espressione di qualsiasi tipo. Le espressioni vengono convertite in NVARCHAR
o VARCHAR
tipi durante la concatenazione. I tipi non stringa vengono convertiti in NVARCHAR
digitare.
Dove separatore è un'espressione di NVARCHAR
o VARCHAR
tipo utilizzato come separatore per le stringhe concatenate. Può essere letterale o variabile.
La clausola d'ordine (facoltativa) è composta da WITHIN GROUP
seguito da ORDER BY ASC
o ORDER BY DESC
tra parentesi. ASC
ordina il risultato in ordine crescente. Questo è il valore predefinito. DESC
ordina il risultato in ordine decrescente.
Esempio
Ecco un rapido esempio di STRING_AGG()
funzione:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres;
Risultato:
Result -------------------------------------------- Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Come puoi vedere, il set di risultati è elencato come un elenco separato da virgole. Questo perché il nostro secondo argomento è una virgola, che specifica che una virgola deve essere utilizzata come separatore.
Ecco lo stesso set di risultati ma senza STRING_AGG()
funzione:
SELECT Genre AS Result FROM Genres;
Risultato:
Result ------- Rock Jazz Country Pop Blues Hip Hop Rap Punk
Quindi solo un normale set di risultati.
Per altri esempi, come il raggruppamento, la gestione dei valori Null e l'ordinamento dei risultati, vedere Come restituire i risultati delle query come un elenco separato da virgole in SQL Server.