Просматривая этот раздел комментариев, я наткнулся на два разных шаблона, отвечающих на вопрос. К сожалению, для 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