Transact-SQL: Выборка и сортировка уникальных значений из столбца
У меня проблема. Имеется таблица [Person], один из столбцов которой - город прописки [citizen]. Нужно получить список уникальных городов проживания, отсортировав по длине названия населённого пункта.
Если я выполняю следующий код:
SELECT DISTINCT citizen FROM Person ORDER BY length(citizen);
например, в онлайн редакторе SQL, он выполняется правильно.
Но когда я в своей Microsoft SQL Server Management Studio пишу:
SELECT DISTINCT [citizen] FROM [dbo].[Person] ORDER BY LEN([citizen])
GO
то получаю ошибку:
Элементы ORDER BY должны входить в список выбора, если указывается SELECT DISTINCT.
А если пишу:
SELECT DISTINCT [citizen],
LEN([citizen])
FROM [dbo].[Person] ORDER BY LEN([citizen])
GO
Получаю:
| citizen | (Отсутствует имя столбца) | |
|---|---|---|
| 1 | Тула | 4 |
| 2 | Москва | 6 |
| 3 | Воронеж | 7 |
| 4 | Волгоград | 9 |
А, так как мне нужен только первый столбец, я пытаюсь сделать:
SELECT [citizen] FROM (
SELECT DISTINCT [citizen],
LEN([citizen])
FROM [dbo].[Person] ORDER BY LEN([citizen])
)
но получаю уже другую ошибку:
Предложение ORDER BY не допускается в представлениях, встроенных функциях, производных таблицах, вложенных запросах и обобщенных табличных выражениях, если вместе с ним не указано предложение TOP, OFFSET или FOR XML.
Подскажите, пожалуйста, как написать правильно и компактно нужный мне запрос?
Ответы (1 шт):
SELECT [citizen]
FROM [dbo].[Person]
GROUP BY [citizen]
ORDER BY LEN([citizen])