SQL Server - 如何确定select查询中条件的优先级
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server - 如何确定select查询中条件的优先级相关的知识,希望对你有一定的参考价值。
我有一个DB表(比如学生),它有以下样本数据
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中扣除了临时表的数量,并选择剩余的具有第二个条件的学生,并再次附加到临时表中。
但是我想在一个查询中实现它,因为原始表非常大并且占用了太多的执行时间。如果您需要更多说明,请告诉我。
您可以根据需要使用order by
:
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
。
这在黑暗中有点刺,但我认为这很容易通过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的数据等等等等。
以上是关于SQL Server - 如何确定select查询中条件的优先级的主要内容,如果未能解决你的问题,请参考以下文章
Oracle, SQL Server, My SQL如何实现数据分页查询语句
如何将 MS-SQL Server SELECT 查询转换/迁移到 Oracle 和 MySQL?
SQL Server 数据库的SELECT 语句基本用法介绍