Concat строки в Azure без XML

У меня есть запрос, в котором я пытаюсь соединить разные значения из двух строк. Я использую Azure SQL DW, и он не поддерживает функции XML.

Это запрос, который я написал:

SELECT CAST(STUFF((
    SELECT ',' + cast(s.MONTH_ID AS VARCHAR(6))
    FROM (
        SELECT DISTINCT CAST(MONTH_ID AS VARCHAR(6)) AS MONTH_ID
        FROM dbo.MARGIN_CLASS_FACT
        ) s
    FOR XML PATH('')
    ), 1, 1, '') AS VARCHAR(35)) AS MONTH_ID;

Когда я использую FOR XML PATH, я получаю эту ошибку ** Msg 103010, уровень 16, состояние 1, ошибка синтаксического анализа строки 1 в строке: 1, столбец: 212: неправильный синтаксис рядом с «FOR». **

ввод:

2018
2019

Вывод результата должен быть таким:

201808,201809

person Looking_for_answers    schedule 01.10.2018    source источник
comment
Код Stuff / FOR XML — это традиционный взлом, связанный с отсутствием в Sql Server функции MySql GROUP_CONCAT. Хотя сам Sql Server теперь, наконец, имеет STRING_AGG, он еще не поддерживается в Azure DWH в соответствии с повторяющейся ссылкой.   -  person StuartLC    schedule 01.10.2018


Ответы (1)


Ниже показан Azure SQL 12.0.2000.8, но он явно не работает в Azure DWH

Взлом Stuff / Xml для обхода отсутствия GROUP_CONCAT/LIST_AGG MySql больше не нужен в последних версиях Sql - теперь у нас есть STRING_AGG версии 2017 и более поздние версии:

select STRING_AGG(MyColumn, ',')
from [dbo].[MyTable];

Я только что проверил это на недавней базе данных Azure.

Microsoft SQL Azure (окончательная первоначальная версия) — 12.0.2000.8, 31 августа 2018 г., 20:17:59
Copyright (C) Microsoft Corporation, 2018 г.

person StuartLC    schedule 01.10.2018
comment
он показывает, что STRING_AGG не является встроенной функцией - person Looking_for_answers; 01.10.2018
comment
Я только что выполнил запрос с помощью STRING_AGG к базе данных SQL Azure, и он работал нормально. Microsoft SQL Azure (окончательная первоначальная версия) — 12.0.2000.8 31 августа 2018 г. 20:17:59 Copyright (C) 2018 Microsoft Corporation - person Jeremy J.; 01.10.2018
comment
Мой плохой — ОП указала Azure DWH. Вероятно, еще не обновлен с STRING_AGG. - person StuartLC; 01.10.2018
comment
@StuartLC: Что мне делать, если вы отметили это как дубликат? - person Looking_for_answers; 03.10.2018
comment
Вот и все — ответа нет, поскольку Azure DW не поддерживает большую часть функций XML (или JSON), необходимых для взлома STUFF/XML, и не поддерживает «правильную» функцию STRING_AGG, которую MS, наконец, реализовала в основная база данных SQL (включая Azure). Есть запрос функции для здесь< /а>. Вы также можете попробовать эти другие обходные пути. - person StuartLC; 03.10.2018