Просматривая этот раздел комментариев, я натолкнулся на два разных паттерна, отвечая на вопрос. К сожалению, для SQL 2012 второй шаблон не работает, так что вот моя "работа"
Упорядочить по общей колонке
Это самый простой случай, с которым вы можете столкнуться. Как указали многие пользователи, все, что вам действительно нужно сделать, это добавить Order By
в конец запроса
SELECT a FROM table1
UNION
SELECT a FROM table2
ORDER BY field1
или же
SELECT a FROM table1 ORDER BY field1
UNION
SELECT a FROM table2 ORDER BY field1
Сортировать по разным столбцам
Вот где это действительно сложно. Используя SQL 2012, я попробовал верхний пост, и он не сработал.
SELECT * FROM
(
SELECT table1.field1 FROM table1 ORDER BY table1.field1
) DUMMY_ALIAS1
UNION ALL
SELECT * FROM
(
SELECT table2.field1 FROM table2 ORDER BY table2.field1
) DUMMY_ALIAS2
Следуя рекомендации в комментарии, я попробовал это
SELECT * FROM
(
SELECT TOP 100 PERCENT table1.field1 FROM table1 ORDER BY table1.field1
) DUMMY_ALIAS1
UNION ALL
SELECT * FROM
(
SELECT TOP 100 PERCENT table2.field1 FROM table2 ORDER BY table2.field1
) DUMMY_ALIAS2
Этот код был скомпилирован, но DUMMY_ALIAS1
и DUMMY_ALIAS2
переопределил Order By
установленные вSelect
операторе, что делает его непригодным для использования.
Единственное решение, которое я мог придумать и которое сработало для меня, заключалось в том, чтобы не использовать объединение, а вместо этого запускать запросы индивидуально, а затем обрабатывать их. В общем, не использовать, Union
когда вы хотитеOrder By