Методы объединения значений, разделенных запятыми, в MS SQL (Microsoft SQL Server)

Чтобы объединить значения, разделенные запятыми, в MS SQL (Microsoft SQL Server) можно использовать различные методы. Вот несколько подходов:

  1. STRING_SPLIT и FOR XML PATH:

    SELECT STUFF((SELECT ', ' + value
                FROM STRING_SPLIT('value1,value2,value3', ',')
                FOR XML PATH('')), 1, 2, '') AS Result;
  2. XML и перекрестное применение:

    SELECT STUFF((SELECT ', ' + x.value('.','nvarchar(max)')
                FROM (SELECT CAST('<X>'+REPLACE('value1,value2,value3', ',', '</X><X>')+'</X>' AS XML) AS x) AS records
                CROSS APPLY x.nodes('X') AS T(x)
                FOR XML PATH('')), 1, 2, '') AS Result;
  3. Рекурсивное CTE (общее табличное выражение):

    WITH CTE AS (
     SELECT 'value1,value2,value3' AS csv
    ), RecursiveCTE AS (
     SELECT LEFT(csv, CHARINDEX(',', csv + ',') - 1) AS value, 
            STUFF(csv, 1, CHARINDEX(',', csv + ','), '') AS remaining_csv
     FROM CTE
     UNION ALL
     SELECT LEFT(remaining_csv, CHARINDEX(',', remaining_csv + ',') - 1),
            STUFF(remaining_csv, 1, CHARINDEX(',', remaining_csv + ','), '')
     FROM RecursiveCTE
     WHERE remaining_csv <> ''
    )
    SELECT STUFF((SELECT ', ' + value FROM RecursiveCTE FOR XML PATH('')), 1, 2, '') AS Result;

Это всего лишь несколько примеров того, как можно объединить значения, разделенные запятыми, в MS SQL. В зависимости от ваших конкретных требований и версии базы данных могут быть доступны и другие методы.