我正在使用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,但是我不知道应该键入什么内容,所以我得到了所有数据。
我不确定该语句到底出了什么问题,我尝试使用“ *”而不是“
-Like(“ *”)
-像“ *”
-(不为空)或(为空)
在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],"*")));
感谢您的帮助,谢谢。
答案 0 :(得分:0)
您应该考虑对数据进行规范化,以便使用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
运算符而不是=
运算符结合使用。