MS Access 查询,显示所有记录的条件
MS Access Query, criteria to show all records
我正在使用 MS Access 2010 向导查询来过滤 table。
我想要得到的结果 是 table,returns 数据库基于:
- 今天是星期几
- 正在处理它的用户(用户:以下 table 中的 AAA、BBB、DDD)。
示例 table 如下所示:
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(打开 access base 时计算的),它们是正确的且相等:
[临时变量]![工作日]=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],"*")));
感谢您的帮助,谢谢。
您应该考虑规范化您的数据,以便使用 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])
您的查询未能 return 所需结果的原因是 *
通配符应与 like
运算符一起使用,而不是 =
运算符。
我正在使用 MS Access 2010 向导查询来过滤 table。
我想要得到的结果 是 table,returns 数据库基于:
- 今天是星期几
- 正在处理它的用户(用户:以下 table 中的 AAA、BBB、DDD)。
示例 table 如下所示:
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(打开 access base 时计算的),它们是正确的且相等:
[临时变量]![工作日]=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],"*")));
感谢您的帮助,谢谢。
您应该考虑规范化您的数据,以便使用 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])
您的查询未能 return 所需结果的原因是 *
通配符应与 like
运算符一起使用,而不是 =
运算符。