Przeglądając tę sekcję komentarzy, natrafiłem na dwa różne wzorce odpowiadające na to pytanie. Niestety w przypadku SQL 2012 drugi wzorzec nie działa, więc oto moje „obejście”
Zamów na wspólnej kolumnie
To najłatwiejszy przypadek, jaki możesz napotkać. Jak zauważyło wielu użytkowników, wszystko, co naprawdę musisz zrobić, to dodać Order By
na końcu zapytania
SELECT a FROM table1
UNION
SELECT a FROM table2
ORDER BY field1
lub
SELECT a FROM table1 ORDER BY field1
UNION
SELECT a FROM table2 ORDER BY field1
Sortuj według w różnych kolumnach
Oto, gdzie to naprawdę staje się trudne. Używając SQL 2012, wypróbowałem najwyższy post i to nie działa.
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
Postępując zgodnie z zaleceniem w komentarzu, spróbowałem tego
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
Ten kod skompilował, ale DUMMY_ALIAS1
i DUMMY_ALIAS2
przesłania Order By
ustalone w Select
instrukcji, co sprawia, że jest bezużyteczny.
Jedynym rozwiązaniem, które przyszło mi do głowy, które zadziałało dla mnie, było nie używanie unii, a zamiast tego wykonywanie zapytań indywidualnie, a następnie zajmowanie się nimi. Zasadniczo więc nie używaj a, Union
kiedy chceszOrder By