Может ли кто-нибудь найти синтаксическую ошибку в этом простом запросе?
Пожалуйста, помогите мне с этой ошибкой.
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;