MS Access查询,显示所有记录的条件

时间:2019-02-05 12:41:13

标签: sql ms-access-2010


我正在使用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],"*")));


感谢您的帮助,谢谢。

1 个答案:

答案 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运算符而不是=运算符结合使用。