Duyệt qua phần bình luận này, tôi đã tìm thấy hai mẫu khác nhau trả lời câu hỏi. Đáng tiếc cho SQL 2012, mẫu thứ hai không hoạt động, vì vậy đây là "công việc xung quanh" của tôi
Đặt hàng theo một cột chung
Đây là trường hợp dễ gặp nhất mà bạn có thể gặp phải. Giống như nhiều người dùng đã chỉ ra, tất cả những gì bạn thực sự cần làm là thêm dấu Order By
vào cuối truy vấn
SELECT a FROM table1
UNION
SELECT a FROM table2
ORDER BY field1
hoặc là
SELECT a FROM table1 ORDER BY field1
UNION
SELECT a FROM table2 ORDER BY field1
Đặt hàng theo các cột khác nhau
Đây là nơi mà nó thực sự trở nên khó khăn. Sử dụng SQL 2012, tôi đã thử bài đăng hàng đầu và nó không hoạt động.
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
Sau lời nhắc nhở trong nhận xét, tôi đã thử điều này
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
Mã này đã biên dịch nhưng DUMMY_ALIAS1
và DUMMY_ALIAS2
ghi đè lên đã Order By
thiết lập trong Select
câu lệnh khiến điều này không thể sử dụng được.
Giải pháp duy nhất mà tôi có thể nghĩ ra, phù hợp với tôi là không sử dụng liên hợp và thay vào đó làm cho các truy vấn chạy riêng lẻ và sau đó xử lý chúng. Vì vậy, về cơ bản, không sử dụng Union
khi bạn muốnOrder By