1

我在ms-access中做了一个表格,根据表格得到查询输出。

访问查询中的 sql 为:

SELECT w.* FROM work_log1 AS w, [task name] AS t WHERE t.task_name=forms!
[Accenture QC]!combo4 And t.task_id=w.task_name And w.activity_start_date Between  
forms ![Accenture QC]!text0 And forms![Accenture QC]!text11 
and w.[TAT] = forms![Accenture QC]!combo46

现在一切正常,但如果 combo46 为空白,我想删除最后一个过滤器行。

我以某种方式制作了这样的sql:

and iif(forms![Accenture QC]!combo46 = '', t.task_id=w.task_name ,
t.task_id=w.task_name   and w.[TAT] = forms![Accenture QC]!combo46)

这是正确的方法吗?如果只应用这个 TAT 过滤器怎么办?

我的意思是如果如何写这样的东西:

"SELECT w.* FROM work_log1 AS w where (w.[TAT] = forms![Accenture QC]!combo46 
OR forms![Accenture QC]!combo46 Is Null)" 

谢谢

4

1 回答 1

1

WHERE目前,您条款的最后一部分是...

and w.[TAT] = forms![Accenture QC]!combo46

如果您的目标是忽略对w.[TAT]何时combo46为 Null 的约束,请尝试以下操作:

AND (w.[TAT] = forms![Accenture QC]!combo46
    OR forms![Accenture QC]!combo46 Is Null)

如果“空白”可以表示 Null 以外的任何内容,这可能就不那么简单了……例如,空(零长度)字符串或空格字符。您可以在一个表达式中捕捉所有这些可能性。

Len(Trim(forms![Accenture QC]!combo46 & "")) = 0

在您的问题查询的最新版本中...

SELECT w.*
FROM work_log1 AS w
where
       w.[TAT] = forms![Accenture QC]!combo46 
    OR Len(Trim(forms![Accenture QC]!combo46 & "")) = 0
于 2012-09-13T16:12:52.780 回答