Microsoft Access查询输入条件

时间:2019-06-04 05:39:35

标签: sql ms-access

我正在查询包含客户信息表和付款表的数据库。我需要跟踪每月付款,并在每个月底之前与尚未付款的人联系。我正在处理一个查询,以输出所有当月未付款的列表。人们可以一次支付一个月或几个月的费用。我的付款表中有一个字符串字段,其中记录了付款的月份。该值可以是例如“ 6月”或“ 6月,7月,8月”。对于我的查询,我希望能够输入给定的月份并能够查看谁还没有付款。

我已经在查询中输入了可以在任何月份键入的内容,它将返回其他月份的付款或当某人根本没有付款时返回,但是我无法返回那些值不完全相同的信息与我输入的“ 6月”或其他任何月份匹配。我在这里使用like函数。这是我的代码:

SELECT Clients.[Player ID], Clients.[Player Name], Clients.[Contact Number], Payment.[Payment Amount], Payment.[Payment Month]
FROM Clients INNER JOIN Payment ON Clients.[Player ID] = Payment. [Player ID]
WHERE (((Payment.[Payment Month]) Not Like [Enter the month:])) OR (((Payment.[Payment Month]) Is Null));

当我运行查询以输入“ June”时,它将返回已完成“ 5月的6月,7月,8月”工作的人员。我知道这是因为“五月,六月,七月”与“五月”的输入值不同。有什么办法可以将这些付款从未付款清单中排除?我不希望查询返回可能包含输入月份的任何值。我当时在想可能需要使用通配符,但不确定如何在查询中准确输入此条件,或者不确定是否需要为其编写任何其他SQL代码。

1 个答案:

答案 0 :(得分:0)

如果这确实是一个字符串而不是一个多值字段,并且此时无法进行规范化,请尝试:

SELECT Clients.[Player ID], Clients.[Player Name], Clients.[Contact Number], Payment.[Payment Amount], Payment.[Payment Month]
FROM Clients INNER JOIN Payment ON Clients.[Player ID] = Payment. [Player ID]
WHERE (((Payment.[Payment Month]) Not Like "*" & [Enter the month:] & "*")) OR (((Payment.[Payment Month]) Is Null));

建议不要使用弹出输入参数,因为无法验证用户输入。将用户输入值输入到窗体上的组合框等控件中,并将该控件作为参数引用。