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

Я не верю, что вы можете выставить заказ при получении скалярного значения. И вам это не нужно, так как вы ожидаете только одного значения.

Почти каждый раз, когда вы видите "неверный синтаксис рядом" в скрипте, который кажется правильным или был скопирован и вставлен откуда-то еще, вы, вероятно, имели недопустимые символы в тексте, которые не видны и отображаются в виде пустого пространства. Я бы посоветовал открыть новое окно и заново ввести весь запрос вручную или попытаться угадать, где недопустимые символы очищают их.

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