#sql
#sql
Вопрос:
SELECT TOP 1 LEN(CITY),CITY
FROM STATION
ORDER BY LEN(CITY),CITY;
UNION ALL
SELECT TOP 1 LEN(CITY),CIYT
FROM STATION
ORDER BY LEN(CITY) DESC,CITY DESC;
Комментарии:
1. Я удалил в неподходящих тегах базы данных. Пожалуйста, помечайте только ту базу данных, которую вы действительно используете.
2.
ORDER BY
идет в конце всех ваших инструкций. Также вы завершаете свою инструкцию и начинаете новую сUNION ALL
.3. Как сказал @Lamu, но завершается из-за точки с запятой перед
UNION ALL
4. @GordonLinoff, спасибо, что указали на ошибки… Я буду иметь их в виду в следующий раз
Ответ №1:
ORDER BY
, когда использование UNION ALL
выполняется в конце всего оператора, а не в конце каждого из них. У вас также есть оператор terminator ( ;
) после вашего первого запроса, что означает, что у вас есть SELECT TOP(1)
запрос, за которым следует следующий запрос, начинающийся с UNION ALL
.
Вам нужно использовать подзапросы здесь, а затем UNION
те:
SELECT *
FROM (SELECT TOP (1) LEN(CITY) AS CITYLEN, CITY
FROM STATION
ORDER BY LEN(CITY),CITY) S
UNION ALL
SELECT *
FROM (SELECT TOP (1) LEN(CITY) AS CITYLEN, CITY
FROM STATION
ORDER BY LEN(CITY) DESC,CITY DESC) S
Ответ №2:
Предполагая, что ваша база данных поддерживает TOP
(чего нет у большинства исходных тегов), вы можете использовать подзапрос:
SELECT c.*
FROM ((SELECT TOP (1) LEN(CITY) AS LEN, CITY
FROM STATION
ORDER BY LEN(CITY), CITY
) UNION ALL
(SELECT TOP (1) LEN(CITY), CITY
FROM STATION
ORDER BY LEN(CITY) DESC, CITY DESC
)
) c;
Конечно, точки с запятой также не допускаются в середине запроса, так что это еще одна проблема с вашим запросом.
Комментарии:
1. Здесь возникает та же проблема, что и в моем запросе изначально, вам нужно присвоить псевдонимы столбцам в подзапросах, иначе вы получите сообщение об ошибке.