我有一张桌子,我需要跟踪退回修理的物品,因此跟踪处理,问题以及我们何时收到并运送物品:
Table Name: RMAItems id | RMANbr | PartNbr | RecvDate | ----------------------------------------- 1 | 12345 | 456-003 | 12-21-2012 | 2 | 12345 | 434-007 | 12-21-2012 | 3 | 12346 | 422-010 | | 4 | 12347 | 421-540 | 12-21-2012 | 5 | 12347 | 460-000 | | 6 | 12348 | 459-006 | 12-26-2012 | 7 | 12349 | 439-007 | | 8 | 12349 | 435-006 | |
“Recv Date”列是三个中唯一可以为NULL的列(即无值). id是主键(没有重复),RMA Nbr列可以有重复项(因为每个RMA Nbr可以分配给客户多个项目). Recv Date列可以为NULL,直到我们将其标记为已接收,并且表单通过另一个查询自动填充日期.
我需要Access 2003中的查询(我的公司很差,现在无法升级)来计算RMA Nbr列中Recv Date字段为NULL的不同记录的数量(即我需要知道RMA的数量)没有收到所有物品的Nbr’s).如果我在上面的数据库中运行我需要的查询,我希望它返回3,因为有三个RMA Nbr,它们上面有没有收到的项目.
我尝试了以下查询但没有成功:
SELECT Count(RMANbr) FROM RMAItems WHERE RecvDate Is Null;
(返回4)
SELECT Count(*) FROM RMAItems WHERE RecvDate Is Null;
(返回4)
SELECT Count(*) FROM (SELECT DISTINCT RMANbr FROM RMAItems) WHERE RecvDate Is Null;
(运行此查询时会弹出一个带有文本框的对话框,并在文本框上方显示“RecvDate”)
如上所述,我在Windows XP Pro SP3计算机上使用MS Access 2003.
我已经做了一些谷歌,但没有提出一个查询,它将做我需要它做的事情(这就是我如何提出上面的子查询不起作用).你能提供的任何帮助都是超级的.
谢谢.
最佳答案 使用类似于第三个示例的方法,但将WHERE子句移动到子查询中.您获得RecvDate的参数对话框的原因是因为该字段未包含在子查询SELECT列表中,因此父查询未知/不可用.
SELECT Count(*)
FROM
(
SELECT DISTINCT RMANbr
FROM RMAItems
WHERE RecvDate Is Null
) AS sub;