我有一个数据库表(比如学生),它有以下样本数据
Name ID Active admissionDate ReleaseDate Nationality
John 3572 1 06/02/2014 06/02/2018 0
Sandy 2748 1 06/02/2013 11/01/2016 1
现在我要选择总共10000名学生。 第一个条件是Active = 1(比如有7000个这样的学生)。 第二个条件是国籍= 1(其余3000名学生,所需学生总数为10K)。 全部由出院日期订购
我想在这里实现它应该总共10000名学生,但第一优先级将是活跃= 1,第二优先级将是国籍= 1。 最初我选择第一个条件的学生并存储在临时表中。然后我从10000中扣除了临时表的数量,并选择剩下的具有第二个条件的学生并再次附加在临时表中。
但是我想在一个单独的查询中实现它,因为原始表非常大并且占用了太多的执行时间。如果您需要更多说明,请告诉我。
答案 0 :(得分:5)
您可以根据需要使用select top (1000) s.*
from students s
order by (case when Active = 1 then 1
when Nationality = 1 then 2
else 3
end),
AdmissionDate desc;
:
desc
这假设您首先需要最近的录取。如果您想要最早的afterEach
,请放弃afterEach : function(browser, done) {
browser.end(function(){
done();
});
}
。
答案 1 :(得分:4)
这在黑暗中有点刺,但我认为这可以通过ORDER BY
和CASE
表达式轻松解决。这是psuedo-sql,但是:
WITH Students AS(
SELECT TOP 10000 [YourColumns]
FROM Student S
ORDER BY CASE WHEN Active = 1 THEN 1 ELSE 0 END DESC
CASE WHEN Nationality = 1 THEN 1 ELSE 0 END DESC
CASE WHEN ... )
SELECT *
FROM Students
ORDER BY AdmissionDate;
这意味着您不会在WHERE
子句中限制您的数据集,但是,数据需要先排序,先将那些活动的数据排在首位,然后将那些数据排在首位。 1,等等。