ORDER BY в списке с разделителями-запятыми, используя предложение SELECT
Я использую следующий код для создания списка с разделителями-запятыми. Я хотел, чтобы последовательность списка в чередующемся порядке
USE AdventureWorks
GO
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name
FROM Production.Product
SELECT @listStr
GO
Когда я пытался как
USE AdventureWorks
GO
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name
FROM Production.Product
ORDER BY sortOrder
SELECT @listStr
GO
Показывает ошибку incorrect syntax near ' ORDER'
3 ответа
Используйте STUFF(), который дает тот же результат, разделенный запятыми
USE AdventureWorks
GO
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = STUFF((SELECT ',' + Name
FROM Production.Product
ORDER BY sortOrder
FOR XML PATH('')), 1, 1, '')
SELECT @listStr
GO
Я не верю, что вы можете выставить заказ при получении скалярного значения. И вам это не нужно, так как вы ожидаете только одного значения.
Почти каждый раз, когда вы видите "неверный синтаксис рядом" в скрипте, который кажется правильным или был скопирован и вставлен откуда-то еще, вы, вероятно, имели недопустимые символы в тексте, которые не видны и отображаются в виде пустого пространства. Я бы посоветовал открыть новое окно и заново ввести весь запрос вручную или попытаться угадать, где недопустимые символы очищают их.