我正在设置一份报告,向我展示每个班次的人员。我有一个带有组合框的表单,我可以选择一个特定的班次,或者将其留空显示所有班次。从组合框中选择一个值会将该文本镜像到隐藏文本框,然后将其传递给查询。现在,让报告按班次过滤是很容易的部分,现在我正在开玩笑的是如何设置它以便如果我的Shift Filter框为空以显示所有记录,就像它WHERE子句是空白的吗?
这是我的SQL代码:
true
我有一些链接在一起的查询,这是在完成的数据集发送到报告之前的最后一个查询。就像我说的那样,我可以轻松地向我展示一个特定的转变,并且通过清除CurrentShift的标准,我可以让它显示所有记录,但我如何根据什么'来实现它们之间的交换。在我的滤盒中?
答案 0 :(得分:1)
你可以尝试使用这样的条件:
qryShiftRosterSubShift.CurrentShift = [Forms]![frmNavMain]![NavigationSubform]![ShiftFilter]
OR Len(Nz([Forms]![frmNavMain]![NavigationSubform]![ShiftFilter],""))= 0
答案 1 :(得分:1)
您只需添加OR
子句即可检查组合框是否为空。请注意,您需要考虑""
空字符串和Null
值。我更愿意使用Nz(MyComboBox) = ""
实现:
SELECT DISTINCTROW tblPersonnel.EmpID
,tblRank.Rank
,tblPersonnel.NameStr
,tblPersonnel.Shop
,qryShiftRosterSub.Narrative
,qryShiftRosterSubShift.CurrentShift
,qryShiftRosterSubShift.ShopName
,tblRank.ID
FROM (
(
tblPersonnel LEFT JOIN qryShiftRosterSubShift ON tblPersonnel.EmpID = qryShiftRosterSubShift.EmpID
) LEFT JOIN tblRank ON tblPersonnel.Rank = tblRank.ID
)
LEFT JOIN qryShiftRosterSub ON tblPersonnel.EmpID = qryShiftRosterSub.EmpID
WHERE (
((qryShiftRosterSubShift.CurrentShift) = IIf(Len([Forms] ! [frmNavMain] ! [NavigationSubform] ! [ShiftFilter]) = 0, 'Is Not Null', [Forms] ! [frmNavMain] ! [NavigationSubform] ! [ShiftFilter])
OR Nz([Forms] ! [frmNavMain] ! [NavigationSubform] ! [ShiftFilter]) = "")
AND ((tblPersonnel.DeleteFlag) = False)
);
答案 2 :(得分:0)
为什么不追加' WHERE'如果你的组合框不是空的那么SQL的一部分?