SQL STRING_AGG – spojení řádků do jedné hodnoty (concat string)

Nedávno jsem řešil úlohu, když jsem potřeboval v tabulce spojit řádky v nějaké tabulce do 1 string hodnoty. To nebylo u SQL Server ještě nedávno úplně jednoduché, protože narozdíl od třeba mysql neobsahoval speciální funkci k tomu určenou (muselo se na to jít přes příkaz FOR XML PATH). V SQL Server 2017 byla ale nasazena sql textová funkce STRING_AGG a s ní je to daleko jednodušší.

Syntaxe funkce STRING_AGG

SELECT
   STRING_AGG (expression, separator) WITHIN GROUP (ORDER BY <order_by_expression_list> [ ASC | DESC ])
FROM <Tabulka>

Funkce má 2 povinné argumenty:

  • expression – sloupec s hodnotami, které se mají spojovat
  • separator – čím mají být hodnoty odděleny

Nepovinná klauzule WITHIN GROUP – pomocí klauzule můžeme hodnoty před spojením uspořádat vzestupně nebo sestupně

Příklad spojení (concatenate) řádků v tabulce do hodnoty (string)

CREATE TABLE Temp.dbo.Biportal_Test (
String VARCHAR(20)
)

INSERT INTO Temp.dbo.Biportal_Test (String)
VALUES
(‘Text,’),
(‘který’),
(‘chci’),
(‘agregovat’),
(‘na’),
(‘hodnotu’)

SELECT * FROM Temp.dbo.Biportal_Test;

Tabulka:

STRING_AGG - příklad

Převedení řádku tabulky na string:

SELECT STRING_AGG(String, ‘ ‘) AS Hodnota
FROM Temp.dbo.Biportal_Test

STRING_AGG - řešení příkladu - agregace řádku do hodnoty

5/5 - (2 votes)
Rubrika: SQL Funkce

O Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako data engineer freelancer. Během cca 10 let jsem zde shromáždil přes 600 IT case studies, průvodců, návodů a tipů určených zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Data Engineeringu, korporátních financí a reportingu. Zaměřuji se především na Microsoft technologie (on-prem i cloud) a různé synergické efekty v rámci jejich produktového portfolia pro dataře a finanční profesionály. Věnuji se také dalším platformám a významným hráčům z oblasti open source technologií. 🔥 Pokud vám tento článek pomohl, ocením referenci na vašem webu nebo zmínku v komunitě. A mám pro vás ještě tip: řešíte-li nějaký zapeklitý Excel problém, přihlašte se do naší Excel Facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse ».

1 thoughts on “SQL STRING_AGG – spojení řádků do jedné hodnoty (concat string)

  1. Anonymous

    Pro tabulku (kupř. TB_POZNAMKY):

    ID | CIS_SML | POR | POZN
    1 | 0560334 | 1 | Klient předložil ohodnocení |
    2 | 0560334 | 2 | stavebního pozemku dne |
    3 | 0560334 | 3 | 24.4. 2023 |
    4 | 8847201 | 1 | Nedostavil se na schůzku |
    5 | 8847201 | 2 | dne 31.12.2023 ve 21:00 |

    lze použít GROUP BY:

    SELECT CIS_SML AS “Číslo smlouvy”,
    STRING_AGG(TRIM(POZN), ‘ ‘) AS “Poznámka”
    FROM TB_POZNAMKY
    GROUP BY CIS_SML

    dostaneme:
    Číslo smlouvy | Poznámka
    0560334 | Klient předložil ohodnocení stavebního pozemku dne 24.4. 2023
    8847201 | Nedostavil se na schůzku dne 31.12.2023 ve 21:00

Leave a Reply

Your email address will not be published. Required fields are marked *