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:
Převedení řádku tabulky na string:
SELECT STRING_AGG(String, ‘ ‘) AS Hodnota
FROM Temp.dbo.Biportal_Test