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

ввод:

2018
2019

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

201808,201809

Код Stuff / FOR XML - это традиционный прием, связанный с отсутствием в Sql Server функции GROUP_CONCAT в MySql. Хотя сам сервер Sql теперь, наконец, имеет STRING_AGG, это еще не поддерживается в Azure DWH согласно ссылке Duplicate.

StuartLC 01.10.2018 18:15
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
487
1

Ответы 1

Ниже приведен 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 не является встроенной функцией

Looking_for_answers 01.10.2018 17:59

Я только что выполнил запрос с STRING_AGG к базе данных SQL Azure, и он работал нормально. Microsoft SQL Azure (RTM) - 12.0.2000.8 31 августа 2018 20:17:59 Copyright (C) 2018 Microsoft Corporation

Jeremy J. 01.10.2018 18:06

Мой плохой - OP перечислил Azure DWH. Скорее всего, еще не обновлен с помощью STRING_AGG.

StuartLC 01.10.2018 18:08

@StuartLC: Как мне действовать, если вы отметили его как дубликат

Looking_for_answers 03.10.2018 14:42

Это почти все - ответа нет, поскольку Azure DW не поддерживает большую часть функций XML (или JSON), необходимых для взлома STUFF / XML, и не поддерживает `` правильную '' функцию STRING_AGG, которую MS, наконец, реализовала в основная база данных SQL (включая Azure). Есть запрос функции для это здесь. Вы также можете попробовать эти другие обходные пути.

StuartLC 03.10.2018 14:50

Другие вопросы по теме