Většina hlavních RDBMS má funkci, která nám umožňuje vracet výsledky dotazu jako seznam oddělený čárkami.
To znamená, že můžeme použít takovou funkci k převedení každého řádku na samostatnou položku seznamu v rámci seznamu odděleného čárkami.
Níže jsou uvedeny příklady, jak toho dosáhnout v některých populárnějších RDBMS.
MySQL
MySQL má GROUP_CONCAT()
funkce, která nám umožňuje zobrazit výsledky dotazu v seznamu odděleném čárkami:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Výsledek:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Můžeme také dělat věci, jako je odstranění duplicitních hodnot (pomocí DISTINCT
klauzule), zadejte pořadí výsledků (pomocí ORDER BY
klauzule) a zadejte jiný oddělovač.
Viz GROUP_CONCAT()
Funkce v MySQL pro další příklady.
Databáze Oracle
Oracle Database má LISTAGG()
funkce:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Výsledek:
Hunold, Ernst, Austin, Pataballa, Lorentz
Stejně jako MySQL nám také Oracle Database umožňuje odstranit duplicitní hodnoty, určit pořadí výsledků, určit jiný oddělovač atd.
Viz LISTAGG()
Další příklady najdete v aplikaci Oracle.
SQL Server
SQL Server má STRING_AGG()
funkce, která vrátí naše výsledky v seznamu odděleném čárkami:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres
Výsledek:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Můžeme také odstranit duplicitní hodnoty, určit pořadí výsledků, změnit oddělovač atd.
Další příklady naleznete v části Jak vrátit výsledky dotazu jako seznam oddělený čárkami na serveru SQL.
MariaDB
Stejně jako MySQL má MariaDB také GROUP_CONCAT()
funkce:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Výsledek:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Stejně jako stejnojmenná funkce MySQL můžeme také dělat věci, jako je odstranění duplicitních hodnot (pomocí DISTINCT
klauzule), zadejte pořadí výsledků (pomocí ORDER BY
klauzule), změnit oddělovač atd.
Nicméně jedna věc, kterou má MariaDB oproti MySQL, je LIMIT
klauzule, která nám poskytuje možnost omezit počet výsledků v seznamu.
Viz MariaDB GROUP_CONCAT()
pro další příklady.
PostgreSQL
Postgres má STRING_AGG()
funkce:
SELECT STRING_AGG(PetName, ',')
FROM Pets;
Výsledek:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Můžeme také odstranit duplicitní hodnoty (pomocí DISTINCT
klauzule), zadejte pořadí výsledků (pomocí ORDER BY
klauzule), změnit oddělovač atd.
Viz STRING_AGG()
Funkce v PostgreSQL pro další příklady.
SQLite
V SQLite můžeme použít GROUP_CONCAT()
funkce pro transformaci našich výsledků dotazu na seznam oddělený čárkami:
SELECT group_concat(FirstName)
FROM Employee;
Výsledek:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura
Viz Jak GROUP_CONCAT()
Více příkladů funguje v SQLite.
Více sloupců
Všechny výše uvedené příklady používají pro seznam jeden sloupec. Můžeme také zřetězit více sloupců a vytvořit seznam, který obsahuje více sloupců.
Předpokládejme, že máme tabulku s následujícími údaji:
SELECT TaskId, TaskName
FROM Tasks;
Výsledek:
TaskId TaskName ------ ------------ 1 Feed cats 2 Water dog 3 Feed garden 4 Paint carpet 5 Clean roof 6 Feed cats
V SQL Server můžeme udělat následující pro výstup obou sloupců v jednom řádku:
SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ')
FROM Tasks
Výsledek:
1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats