sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-servern som motsvarar GROUP_CONCAT()

Innan SQL Server 2017 kom fanns det inte en T-SQL-motsvarighet till MySQL GROUP_CONCAT() fungera. Denna funktion låter dig returnera en resultatuppsättning som en kommaseparerad lista, i motsats till att lista varje rad som en separat rad (som med en normal resultatuppsättning).

Före SQL Server 2017, om du vill lägga ditt resultat i en kommaseparerad lista, måste du hitta en lösning, kanske med en kombination av STUFF() , FOR XML och PATH() .

Men T-SQL har nu STRING_AGG() funktion som är tillgänglig från SQL Server 2017. Denna funktion gör ungefär samma sak som MySQL:s GROUP_CONCAT() funktion (med några mindre skillnader).

Syntax

Syntaxen för STRING_AGG() funktionen går så här:

STRING_AGG ( expression, separator ) [ <order_clause> ]

<order_clause> ::=   
    WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )

Där expression är ett uttryck av alla slag. Uttryck konverteras till NVARCHAR eller VARCHAR typer under sammanlänkning. Icke-strängtyper konverteras till NVARCHAR typ.

Där separator är ett uttryck för NVARCHAR eller VARCHAR typ som används som separator för sammanlänkade strängar. Det kan vara bokstavligt eller variabelt.

Ordningssatsen (valfritt) består av WITHIN GROUP följt av ORDER BY ASC eller ORDER BY DESC inom parantes. ASC beställer resultatet i stigande ordning. Detta är standardvärdet. DESC beställer resultatet i fallande ordning.

Exempel

Här är ett snabbt exempel 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 är resultatuppsättningen listad som en kommaseparerad lista. Detta beror på att vårt andra argument är ett kommatecken, som anger att ett kommatecken ska användas som avgränsare.

Här är samma resultatuppsättning men utan STRING_AGG() funktion:

SELECT Genre AS Result 
FROM Genres;

Resultat:

Result 
-------
Rock   
Jazz   
Country
Pop    
Blues  
Hip Hop
Rap    
Punk   

Så bara ett normalt resultat.

För fler exempel, såsom gruppering, hantering av nollvärden och ordning av resultaten, se Hur man returnerar frågeresultat som en kommaseparerad lista i SQL Server.


  1. Hur får jag åtkomst till data/datamapp på Android-enhet?

  2. Ett fel uppstod under installationen av pg (0.17.1), och Bundler kan inte fortsätta

  3. PostgreSQL-säkerhetskopieringsmetodfunktioner i AWS S3

  4. Oracle subquery ser inte variabeln från det yttre blocket 2 nivåer upp