我已经在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)"
由于
答案 0 :(得分:1)
目前,WHERE
子句的最后一部分是......
and w.[TAT] = forms![Accenture QC]!combo46
如果您的目标是在w.[TAT]
为空时忽略combo46
上的约束,请尝试以下操作:
AND (w.[TAT] = forms![Accenture QC]!combo46
OR forms![Accenture QC]!combo46 Is Null)
如果“ blank ”可能表示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