MS Access SQL - 如何有条件地为所有人设置标准?

时间:2017-09-19 10:18:49

标签: ms-access

我正在设置一份报告,向我展示每个班次的人员。我有一个带有组合框的表单,我可以选择一个特定的班次,或者将其留空显示所有班次。从组合框中选择一个值会将该文本镜像到隐藏文本框,然后将其传递给查询。现在,让报告按班次过滤是很容易的部分,现在我正在开玩笑的是如何设置它以便如果我的Shift Filter框为空以显示所有记录,就像它WHERE子句是空白的吗?

这是我的SQL代码:

true

我有一些链接在一起的查询,这是在完成的数据集发送到报告之前的最后一个查询。就像我说的那样,我可以轻松地向我展示一个特定的转变,并且通过清除CurrentShift的标准,我可以让它显示所有记录,但我如何根据什么'来实现它们之间的交换。在我的滤盒中?

3 个答案:

答案 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的一部分?