sql >> Databáze >  >> RDS >> Sqlserver

SQL Server ekvivalentní GROUP_CONCAT()

Než přišel SQL Server 2017, neexistoval ekvivalent T-SQL k MySQL GROUP_CONCAT() funkce. Tato funkce umožňuje vrátit sadu výsledků jako seznam oddělený čárkami, na rozdíl od výpisu každého řádku jako samostatného řádku (jako u normální sady výsledků).

Pokud jste před SQL Serverem 2017 chtěli vložit výsledek do seznamu odděleného čárkami, museli byste najít řešení, například pomocí kombinace STUFF() , FOR XML a PATH() .

T-SQL však nyní obsahuje STRING_AGG() funkce, která je dostupná ze serveru SQL Server 2017. Tato funkce dělá v podstatě totéž jako GROUP_CONCAT() MySQL funkce (s některými menšími rozdíly).

Syntaxe

Syntaxe STRING_AGG() funkce vypadá takto:

STRING_AGG ( expression, separator ) [ <order_clause> ]

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

Kde expression je výraz jakéhokoli typu. Výrazy jsou převedeny na NVARCHAR nebo VARCHAR typy během zřetězení. Neřetězcové typy se převedou na NVARCHAR typ.

Kde oddělovač je výraz NVARCHAR nebo VARCHAR typ, který se používá jako oddělovač pro zřetězené řetězce. Může být doslovný nebo variabilní.

(volitelná) klauzule objednávky se skládá z WITHIN GROUP následuje ORDER BY ASC nebo ORDER BY DESC v závorce. ASC seřadí výsledek vzestupně. Toto je výchozí hodnota. DESC seřadí výsledek v sestupném pořadí.

Příklad

Zde je rychlý příklad STRING_AGG() funkce:

SELECT STRING_AGG(Genre, ',') AS Result
FROM Genres;

Výsledek:

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

Jak vidíte, sada výsledků je uvedena jako seznam oddělený čárkami. Důvodem je, že naším druhým argumentem je čárka, která určuje, že jako oddělovač by měla být použita čárka.

Zde je stejná sada výsledků, ale bez STRING_AGG() funkce:

SELECT Genre AS Result 
FROM Genres;

Výsledek:

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

Takže jen normální sada výsledků.

Další příklady, jako je seskupování, zpracování hodnot null a řazení výsledků, najdete v tématu Jak vrátit výsledky dotazu jako seznam oddělený čárkami na serveru SQL.


  1. IntegrityError:rozlišujte mezi jedinečným omezením a nenulovým porušením

  2. Je špatný návrh používat pole v databázi?

  3. Jak odstranit značky HTML z řetězce na serveru SQL?

  4. Jak nastavit replikaci MySQL v RHEL, Rocky a AlmaLinux