SQL Server - 如何确定select查询中条件的优先级

时间:2018-04-05 11:28:00

标签: sql sql-server select

我有一个数据库表(比如学生),它有以下样本数据

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中扣除了临时表的数量,并选择剩下的具有第二个条件的学生并再次附加在临时表中。

但是我想在一个单独的查询中实现它,因为原始表非常大并且占用了太多的执行时间。如果您需要更多说明,请告诉我。

2 个答案:

答案 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 BYCASE表达式轻松解决。这是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,等等。