MS Access Query,显示所有记录的条件
Posted
技术标签:
【中文标题】MS Access Query,显示所有记录的条件【英文标题】:MS Access Query, criteria to show all records 【发布时间】:2019-02-05 12:41:12 【问题描述】:我正在使用 MS Access 2010 向导查询来过滤表。 我想要得到的结果是一个返回数据库的表: - 今天是星期几 - 正在使用它的用户(用户:下表中的 AAA、BBB、DDD)。
示例表如下所示:
Monday | Tuesday
AAA | BBB
AAA | BBB
DDD | AAA
DDD | AAA
我想要的结果 如果今天是星期一,我想要 AAA 的数据
Monday | Tuesday
AAA | BBB
AAA | BBB
如果今天是星期二,我想要 AAA 的数据
Monday | Tuesday
DDD | AAA
DDD | AAA
到目前为止我的想法: 在条件字段中,我输入了一个条件:
IIf([TempVars]![WorkingDay]=2,[TempVars]![WorkingUser],*)
我的理解是: -> 如果今天是第二天(星期二),则显示 AAA 的数据,否则(不是星期二)显示全部。
我检查了 TempVars(在访问基地打开时计算),它们是正确的并且相等: [TempVars]![WorkingDay]=2 [TempVars]![WorkingUser]=AAA
这确实有效 -> 我看到了 AAA 的记录,但是如果今天不是星期二(TempVar = 1)我想查看所有记录(编译器应该进入错误的声明,即“*”,但我实际上没有看不到任何记录...编译器进入错误语句,如果我手动插入“BBB”我会得到 BBB,但是 我不知道我应该输入什么,所以我得到了所有数据。
我不确定那句话有什么问题,我尝试了而不是“*”,输入: - 喜欢(“*”) - 喜欢“*” -(不为空)或(为空) 在 Access 中显示如下:Screen from Access SQL 代码,由 Access 生成:
SELECT
t001.Monday, t001.Tuesday
FROM
Tbl_001_WholeBase AS t001
WHERE
(((t001.Monday)=IIf([tempvars]![WorkingDay]=1,[tempvars]![WorkingUser],"*")) AND ((t001.Tuesday)=IIf([tempvars]![WorkingDay]=2,[tempvars]![WorkingUser],"*")));
感谢您的帮助,谢谢。
【问题讨论】:
【参考方案1】:您应该考虑规范化您的数据,以便使用 Weekday
字段表示工作日,而不是为一周中的每一天使用单独的字段。
尽管如此,以下查询使用Choose
函数来获得所需的结果:
select
t001.Monday, t001.Tuesday
from
tbl_001_wholebase t001
where
choose
(
[tempvars]![WorkingDay],
t001.Monday = [tempvars]![WorkingUser],
t001.Tuesday = [tempvars]![WorkingUser]
)
或者,使用逻辑运算符:
select
t001.Monday, t001.Tuesday
from
tbl_001_wholebase t001
where
([tempvars]![WorkingDay] = 1 and t001.Monday = [tempvars]![WorkingUser]) or
([tempvars]![WorkingDay] = 2 and t001.Tuesday = [tempvars]![WorkingUser])
您的查询未能返回所需结果的原因是*
通配符应与like
运算符一起使用,而不是=
运算符。
【讨论】:
以上是关于MS Access Query,显示所有记录的条件的主要内容,如果未能解决你的问题,请参考以下文章
MS Access Query 以检索订单日期列中最新日期的记录