Может ли кто-нибудь найти синтаксическую ошибку в этом простом запросе?

Пожалуйста, помогите мне с этой ошибкой.

SELECT StateProvince,STRING_AGG(AddressID, ',') WITHIN GROUP (ORDER BY AddressID)
FROM [SalesLT].[Address] GROUP BY StateProvince;

Я не могу найти ошибку в этом, но он говорит

Неверный синтаксис рядом с '('.

2 ответа

Возникла такая же проблема после обновления базы данных с SQL 2008R2 до 2017 года. Устранена путем установки уровня совместимости равным 110 (или выше?)

ДЛЯ SQL SERVER 2017

SELECT StateProvince,
       STRING_AGG(AddressID, ',') WITHIN GROUP (ORDER BY AddressID) AS AddressID
FROM [SalesLT].[Address] GROUP BY StateProvince;

DEMO

http://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=69e5f9e9c5f3cab62e4b2eb9fb678299

ДЛЯ СЕРВЕРА SQL Ниже 2017

SELECT
      StateProvince, 
      AddressID = STUFF((
          SELECT ',' + CAST(md.AddressID AS NVARCHAR)
          FROM [SalesLT].[Address] md
          WHERE m.StateProvince = md.StateProvince
          ORDER BY AddressID
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM [SalesLT].[Address] m
Group by StateProvince

DEMO

http://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=a1722450c70c946e9b53ae23785f4919

Я не вижу ошибку, связанную с полученным вами сообщением. С большими данными он будет жаловаться на ограничение 8000 байт. Это прекрасно работает под MS SQL 2017, примером базы данных AdventureWorks (не облегченной с меньшим количеством данных):

SELECT StateProvinceID,
       STRING_AGG(cast(AddressID as varchar(MAX)), ',') WITHIN GROUP (ORDER BY AddressID) as AdressIDS
FROM [Person].[Address] 
GROUP BY StateProvinceID;
Другие вопросы по тегам