У меня есть запрос, в котором я пытаюсь объединить разные значения из двух строк. Я использую 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 Я получаю эту ошибку ** Сообщение 103010, уровень 16, состояние 1, строка 1 Ошибка синтаксического анализа в строке: 1, столбце: 212: неправильный синтаксис рядом с 'FOR'. **
ввод:
2018
2019
Результат должен быть таким:
201808,201809


Ниже приведен Azure SQL 12.0.2000.8, но, очевидно, он не работает в Azure DWH.
Хак Stuff / Xml для обхода отсутствия GROUP_CONCAT в MySql / LIST_AGG Oracle больше не нужен в последних версиях Sql - теперь у нас есть STRING_AGG версии 2017 и более поздних версий:
select STRING_AGG(MyColumn, ',')
from [dbo].[MyTable];
Я только что проверил это в недавней базе данных Azure.
Microsoft SQL Azure (RTM) - 12.0.2000.8 Aug 31 2018 20:17:59
Copyright (C) 2018 Microsoft Corporation
он показывает, что STRING_AGG не является встроенной функцией
Я только что выполнил запрос с STRING_AGG к базе данных SQL Azure, и он работал нормально. Microsoft SQL Azure (RTM) - 12.0.2000.8 31 августа 2018 20:17:59 Copyright (C) 2018 Microsoft Corporation
Мой плохой - OP перечислил Azure DWH. Скорее всего, еще не обновлен с помощью STRING_AGG.
@StuartLC: Как мне действовать, если вы отметили его как дубликат
Это почти все - ответа нет, поскольку Azure DW не поддерживает большую часть функций XML (или JSON), необходимых для взлома STUFF / XML, и не поддерживает `` правильную '' функцию STRING_AGG, которую MS, наконец, реализовала в основная база данных SQL (включая Azure). Есть запрос функции для это здесь. Вы также можете попробовать эти другие обходные пути.
Код Stuff / FOR XML - это традиционный прием, связанный с отсутствием в Sql Server функции GROUP_CONCAT в MySql. Хотя сам сервер Sql теперь, наконец, имеет STRING_AGG, это еще не поддерживается в Azure DWH согласно ссылке Duplicate.