我以过滤表使用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],*)
我的理解是: - >如果今天是第2天(星期二)则显示了AAA的数据,否则(它不是星期二)显示所有。
我检查TempVars的(接入基站打开时计算),他们是正确的,是平等的: [TempVars的]![WorkingDay] = 2 [TempVars的]![WorkingUser] = AAA
实际工作 - >我看到记录AAA,但是,如果今天不是周二(TempVar的= 1),我希望看到所有记录(compilator应该进入虚假陈述,这是“*”,但其实我没有看到任何记录... Compilator进入虚假的陈述,如果我手动插入“BBB”我会得到BBB,但我不知道我应该怎么键入,所以我得到的所有数据。
我不知道什么是错的这种说法,我想,而不是“*”,把: - 喜欢(” * ”) - 喜欢 ” * ” - (不为空)或(为null) 在访问它提出这样的: 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])
你的查询无法返回所期望的结果的原因是因为*
通配符应与like
运营商,而不是运营商=
一起使用。