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 - (1 vote)

Ing. Jan Zedníček - Data & Finance

Jmenuji se Honza Zedníček a působím jako freelancer. Tuto práci dělám pro různé firmy již přes 10 let. Před tím jsem dlouhou dobu pracoval také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví a výroby. Po práci si rád zahraju tenis, volejbal, šachy a zajdu do posilovny. Svoje znalosti a názory se snažím už několik let zapisovat na tento web, aby sloužily i někomu dalšímu - zejména studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

=> Přihlašte se do naší Excel facebook skupiny (1.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »
=> Pokud vám článek pomohl, sdílejte ho nebo mě uveďte na vašich webových stránkách jako užitečný zdroj informací.

Leave a Reply

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