SqlServer 巧妙解决多条件组合查询

开发中经常会遇得到需要多种条件组合查询的情况,比如有三个表,年级表Grade(GradeId,GradeName),班级Class(ClassId,ClassName,GradeId),学员表Student(StuId,StuName,ClassId),现要求可以按年级Id、班级Id、学生名,这三个条件可以任意组合查询学员信息。

  做法不止一种,这里提供一种巧妙的使用一条查询来实现的办法,我们来写成一个过程,如下:

复制代码 代码如下:

create proc up_select_student_combocondition

@gradeId int,

@classId int,

@stuName nvarchar(10)

as

select s.*,c.classname,g.gradename from student s join class c on s.classid=c.classid join grade g on c.gradeid=g.gradeid

where

(@gradeId=-1 or g.gradeid=@gradeId) and

(@classId=-1 or c.classid=@classId) and

(@stuName='' or s.stuName=@stuName)

go

--那么:

 exec up_select_student_combocondition -1,-1,'' --这是查询所有学员信息

 exec up_select_student_combocondition 2,-1,'' --这是查询年级Id为2的学员信息

exec up_select_student_combocondition -1,4,'' --这是查询班级Id为4的学员信息

exec up_select_student_combocondition 2,4,'' --这是查询年级Id为2且班级Id为4的学员信息

--etc....

时间: 2024-11-02 08:15:45

SqlServer 巧妙解决多条件组合查询的相关文章

SqlServer 巧妙解决多条件组合查询_MsSql

开发中经常会遇得到需要多种条件组合查询的情况,比如有三个表,年级表Grade(GradeId,GradeName),班级Class(ClassId,ClassName,GradeId),学员表Student(StuId,StuName,ClassId),现要求可以按年级Id.班级Id.学生名,这三个条件可以任意组合查询学员信息. 做法不止一种,这里提供一种巧妙的使用一条查询来实现的办法,我们来写成一个过程,如下: 复制代码 代码如下: create proc up_select_student_

蛙蛙推荐:asp中的多条件组合查询实现

条件|组合查询 <!-- 蛙蛙推荐:asp中的多条件组合查询实现多条件组合查询在很多地方都很有用,本文用一个简单的例子来实现一种组合查询在示例之前请确保你安装有sqlserver2000及其默认数据库NorhtWind.代码非常直观,加上关键部分我做了注释,所以很容易理解.需要注意的几个问题就是:1.在字符串连接的时候注意两个需要连接的串中第二个串的开头第一个字符应该打一个空格,这样不至于两个串的首尾相连成一个单词.2.righ的left函数取出的结构区分大小写,如果你字符串里用的是'and',

SqlServer使用 case when 解决多条件模糊查询问题_MsSql

我们在进行项目开发中,经常会遇到多条件模糊查询的需求.对此,我们常见的解决方案有两种:一是在程序端拼接SQL字符串,根据是否选择了某个条件,构造相应的SQL字符串:二是在数据库的存储过程中使用动态的SQL语句.其本质也是拼接SQL字符串,不过是从程序端转移到数据库端而已. 这两种方式的缺点是显而易见的:一是当多个条件每个都可为空时,要使用多个if语句进行判断:二是拼接的SQL语句容易产生SQL注入漏洞. 最近写数据库存储过程的时候经常使用case when 语句,正好可以用这个语句解决一下以上问

SqlServer使用 case when 解决多条件模糊查询问题

我们在进行项目开发中,经常会遇到多条件模糊查询的需求.对此,我们常见的解决方案有两种:一是在程序端拼接SQL字符串,根据是否选择了某个条件,构造相应的SQL字符串:二是在数据库的存储过程中使用动态的SQL语句.其本质也是拼接SQL字符串,不过是从程序端转移到数据库端而已. 这两种方式的缺点是显而易见的:一是当多个条件每个都可为空时,要使用多个if语句进行判断:二是拼接的SQL语句容易产生SQL注入漏洞. 最近写数据库存储过程的时候经常使用case when 语句,正好可以用这个语句解决一下以上问

sql 多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句备忘_MsSql

复制代码 代码如下: DECLARE @PAGESIZE INT DECLARE @PAGEINDEX INT DECLARE @PAGECOUNT INT DECLARE @RECORDCOUNT INT SELECT @PAGESIZE=5 SELECT @PAGEINDEX=1 DECLARE @FIELDNAME VARCHAR(50) DECLARE @FIELDVALUE VARCHAR(50) DECLARE @OPERATION VARCHAR(50) --组合条件 DECLAR

wps表格教程:用ET表格巧妙解决多条件下的成绩统计

在ET表格中,对于班级成绩册的各科求总分.平均分以及排名次等,都可算是轻松的任务.但是,对于多年级多班级混合编排的班级,如果想再类似的操作,那又该如何进行呢? 图1 图1所示为不同学校不同专业混编的示意成绩册.我们需要计算各学校各专业各科目的总分和平均分,并对各学生在各自学校各自专业内排定名次.这项看起来艰巨复杂的任务,在ET表格中正确使用SUMPRODUCT函数,那么完成起来其实也并不算怎么困难.咱们只需如此操作即可: 一.多条件求和 比如我们需要计算工业职专机电专业所有学生的语文成绩总分.分

linq to sql中,如何解决多条件查询问题,答案,用表达式树!_实用技巧

本篇适合于规模较小的数据量,对于大数据量,需要用另外的方式,见下一篇 首先,从网上搜,是必不可少的,大概了解了一下linq 多条件组合查询的方向,就开始动手了,首先,写一个委托的方法: 复制代码 代码如下: private bool GetCondition(FeedBack fb) { bool boolResult = true; int f_type = Int32.Parse(ddlFType.SelectedValue); int isClose = Int32.Parse(ddlIs

linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)_实用技巧

如何从真正意义上做到延迟加载,即一次只从数据库中取我们需要的用到的那部分数据呢.通过研究,有了下面的方法: 首先,我们要新建一个静态类,用于存放多条件组合查询的各种组合,比如or,And这些等等.代码如下: 复制代码 代码如下: using System.Linq.Expressions; public static class PredicateExtensionses { public static Expression<Func<T, bool>> True<T>

PostgreSQL 9.6 黑科技 bloom 算法索引,一个索引支撑任意列组合查询

PostgreSQL 确实是学术界和工业界的璀璨明珠,它总是喜欢将学术界的一些玩意工业化,这次的bloom又是一个代表.在PG很多的地方都能看到学术的影子,比如pgbench支持产生泊松分布,高斯分布的随机值.bloom filter是一个有损过滤器,使用有限的比特位存储一些唯一值集合所产生的bits.通过这些bits可以满足这样的场景需求,给定一个值,判断这个值是否属于这个集合.例如 create table test(c1 int); insert into test select trun