sql >> Database >  >> RDS >> Sqlserver

De SQL Server-equivalent aan GROUP_CONCAT()

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.


  1. Hoe u een kolom voor automatisch verhogen kunt toevoegen aan een bestaande tabel in MySQL

  2. 3 manieren om de verzamelingen beschikbaar te krijgen in MariaDB

  3. SYS_EXTRACT_UTC() Functie in Oracle

  4. Hoe tijd om te zetten naar de tijdzone van het iPhone-apparaat?