选择“查询”以获取与SQL中的where条件匹配和不匹配的数据 如果一个表中总共有1000条记录 我需要得到符合多个条件的总共500行 在N个条件中,有一个条件(A)类似于可选条件 如果只有50条记录与所有N条件匹配,则为600条 符合所有N-1条件的记录(A除外) 然后我需要得到一个50+的组合(600条记录中有450条记录),如下所示 来自SQL的500条记录 不打算使用LEFT JOIN,因为我们有一个包含大量数据的表 资料 例子:
选择“查询”以获取与SQL中的where条件匹配和不匹配的数据 如果一个表中总共有1000条记录 我需要得到符合多个条件的总共500行 在N个条件中,有一个条件(A)类似于可选条件 如果只有50条记录与所有N条件匹配,则为600条 符合所有N-1条件的记录(A除外) 然后我需要得到一个50+的组合(600条记录中有450条记录),如下所示 来自SQL的500条记录 不打算使用LEFT JOIN,因为我们有一个包含大量数据的表 资料 例子:,sql,sql-server,Sql,Sql Server,从上表中,我需要得到4个与课程B、技术和25岁以上年龄相匹配的Id 课程表是一个可选条件,因此我需要得到ID1,2,3,5,6作为结果 从这6行中,我需要得到5条记录,其中我不能删除id 5,因为它匹配所有条件,相反,我可以删除除此之外的任何一条记录,因为其他记录只匹配一个条件 您将此条件添加到order by子句中的大小写表达式中,从而确保首先获得这些记录: SELECT TOP 500 * FROM mytable WHERE /* conditions */ ORD
- 从上表中,我需要得到4个与课程B、技术和25岁以上年龄相匹配的Id
- 课程表是一个可选条件,因此我需要得到ID1,2,3,5,6作为结果
- 从这6行中,我需要得到5条记录,其中我不能删除id 5,因为它匹配所有条件,相反,我可以删除除此之外的任何一条记录,因为其他记录只匹配一个条件
order by
子句中的大小写表达式中,从而确保首先获得这些记录:
SELECT TOP 500 *
FROM mytable
WHERE /* conditions */
ORDER BY CASE WHEN /* optional condition */ THEN 0 ELSE 1 END
您可以使用union
子句
create table #temp (id int, Age int, Course varchar(20))
insert into #temp values (1, 25, 'BE'),(2, 30, 'BE'),(3, 40, 'BE'),(4, 22, 'BE'),(5, 25, 'B. Tech'),(6, 27, 'BE')
select Top 4 * from #temp
where age >= 25
union
select * from #temp
where (Course is null or Course = 'B. Tech')
union
select * from #temp
where age >= 25 OR (Course is null or Course = 'B. Tech')
输出如下所示
id Age Course
1 25 BE
2 30 BE
3 40 BE
5 25 B. Tech
6 27 BE
您可以在此处找到live domo-任何示例数据和预期输出都是必需的,您也尝试快速获得答案。@SurajKumar添加了一个示例数据