今天写点简单的,SQL中的筛选或者说是条件查询
SQL语句中Where子句,指定了需要返回满足什么标准的信息,条件值是True或者False,从而限制了查询中获取的数据
Where子句一般用于查询添加的条件,可以是单个或者多个
其语法结构为:
Select 字段名 From 数据来源 Where 字段名 运算符 值
运算符包含 大于,小于,等于,不等于,大于或等于,小于或等于,In,BetWeen And 等
如下图所示,这里是一份某学校二年级学生的成绩表

有点眼熟吧,前面的例子...
现需要获取1班所有的学生学号,姓名,成绩的信息
使用函数
=IFERROR(INDEX($B$2:$D$32,SMALL(IF($A$2:$A$32="1班",ROW($1:$31),100),ROW($A1)),COLUMN(A1)),"")
或者
=IFERROR(OFFSET($B$1,SMALL(IF($A$2:$A$32="1班",ROW($1:$31),50),ROW(A1)),COLUMN(A1
三键结束,函数解法蛮多的..
使用VBA
Private Sub t2_Click() 'VBADim aData, aRes, intx&, inty&, iRow&With Worksheets("Sheet2")aData = .Range("a1").CurrentRegionReDim aRes(1 To UBound(aData), 1 To UBound(aData, 2))iRow = 1For intx = 2 To UBound(aData)If aData(intx, 1) = "1班" TheniRow = iRow + 1aRes(iRow, 1) = aData(intx, 1)For inty = 2 To UBound(aData, 2)aRes(iRow, inty) = aData(intx, inty)NextEnd IfNextFor inty = 1 To UBound(aData, 2)aRes(1, inty) = aData(1, inty)Next.Range("I12").Resize(iRow, UBound(aRes, 2)) = aResEnd WithEnd Sub
运行效果

代码比较简单,就是遍历循环+判断,成立写入结果数组输出
1.单条件查询
strSQL = "Select * From " & strSource & " Where 班级='1班'"
班级='1班'就是Where语句的筛选条件,它使用了=号来判断字段与条件值是否相等,这里需要注意的是,当条件值为文本时,需要使用''包起来,如果是数值则不用,比如
strSQL = "Select * From " & strSource & " Where 成绩>=90"

筛选出成绩大于等于90分的学员信息
2.多条件查询
strSQL = "Select * From " & strSource & " Where 班级='1班' And 成绩>=90"
查询班级=1班并且成绩是大于等于90的学员
strSQL = "Select * From " & strSource & " Where 班级='1班' or 成绩>=90 Order By 班级"
查询班级=1班或者成绩是大于等于90的学员

3.IN运算符
如果需要查询1班和2班的学员
strSQL = "Select * From " & strSource & " Where 班级 in('1班','2班') Order By 班级"
IN运算用于条件表达式进行SQL查询时,可以显示字段值包含在某个集合中的所有数据
字段名 IN 集合
该集合可以用一个子查询查询得到
若要查询集合以外的数据,可以采用以下表达式
字段名 Not In 集合
值得注意的是在Not In的运算中若出现NULL值,将会导致运算结果与预期不一致
4.BetWeen...And范围之间
例如需要查询成绩在80-90之间的学员
strSQL = "Select * From " & strSource & " Where 成绩 Between 80 And 90"
查询成绩在80-90之间,是包含80和90的关系
当要找出字段在某一范围内的数据时,可以利用BETWEEN运算符
字段名 BetWeen Value1 And Value2
Value1 和 Value2 可以是数字也可以是日期,采用该表达式即表示查询满足字段值大于或等于Value1且小于或等于Value2的数据
当Value1=Value2时,既表示该范围只有1个值与字段=值相等
若要查询指定范围以外的数据,可以采用以下表达式
字段名 Not BetWeen Value1 And Value2
收工!




