Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Micorosft Access SQL-计算3个相关表中的外键记录数_Sql_Ms Access_Ms Query - Fatal编程技术网

Micorosft Access SQL-计算3个相关表中的外键记录数

Micorosft Access SQL-计算3个相关表中的外键记录数,sql,ms-access,ms-query,Sql,Ms Access,Ms Query,我对VBA很有经验,但对SQL不熟悉 我正在为我工作的工厂开发MS Access中的测试表程序。该测试表程序将用于3条产品线 创建订单时,它最多可以包含所有3种产品。这些产品非常独特,我无法将它们全部放在自己的表中。因此,我将测试表分为3个表,每个表代表各自的产品测试表。有关我的关系设置,请参见下图 我想做的是: 我试图设计一个查询,它将作为我的主列表输出到一个连续的表单。主列表将显示所有订单,并显示每个订单中已测试的单元数量。请参见下文,了解我想要的输出 我的问题: 它没有正确计算相关记录的数

我对VBA很有经验,但对SQL不熟悉

我正在为我工作的工厂开发MS Access中的测试表程序。该测试表程序将用于3条产品线

创建订单时,它最多可以包含所有3种产品。这些产品非常独特,我无法将它们全部放在自己的表中。因此,我将测试表分为3个表,每个表代表各自的产品测试表。有关我的关系设置,请参见下图

我想做的是:

我试图设计一个查询,它将作为我的主列表输出到一个连续的表单。主列表将显示所有订单,并显示每个订单中已测试的单元数量。请参见下文,了解我想要的输出

我的问题:

它没有正确计算相关记录的数量。请参阅链接的照片

我知道我的关键字段是订单号,但我正在按工作名称搜索。最初我的关键字段是job name,但后来将其切换为order number


感谢您抽出时间,如果需要,我很乐意提供更多信息。

我已经创建了3个查询。每个查询统计与订单号关联的该产品的测试数。下面您将看到我的代码

qryCountofTestedHv

从那里我进入了relationships视图,并将QryCountofTestedHUV.OrderNumber链接到TblJobName.OrderNumber。现在我可以将查询QryCountofTestedHUV中的CountofHUVTests作为字段添加到我的查询QryAllJobs!QryAllJobs是我之前展示的主列表


我已经对所有3条产品线重复了3次,效果很好

考虑合并三个聚合保存的查询:

选择订单号 ,计数*作为资产测试的计数 来自TblCassetteTestSheet 按订单号分组 选择订单号 ,将*计为SentinelTests的计数 来自TBL连续测试表 按订单号分组 选择订单号 ,将*计数为紫外线测试的计数 从TblHUVTestSheet 按订单号分组 然后在最后的查询括号中加入TblJobName,这是必需的:

选择j.OrderNumber,j.JobName ,c.盒式磁带测试的计数[测试盒式磁带的计数] ,s.作为[被测哨兵的]的哨兵人数 ,h.紫外线测试计数为[测试的HUV的] ,j.JobEndDate,j.SPONumber 来自TblJobName j 左连接QRYCASSETTEST测试表c 关于j.OrderNumber=c.OrderNumber 左连接QRY连续测试表 关于j.OrderNumber=s.OrderNumber 左连接QryHUVTestSheet h 关于j.OrderNumber=h.OrderNumber 可以想象的是,如果MS Access团队改进了它的旧版本,您可以使用子查询运行一个查询,甚至有一天可以运行通用表表达式CTE:

选择j.OrderNumber,j.JobName ,c.盒式磁带测试的计数[测试盒式磁带的计数] ,s.作为[被测哨兵的]的哨兵人数 ,h.紫外线测试计数为[测试的HUV的] ,j.JobEndDate,j.SPONumber 来自TblJobName j 左连接 选择OrderNumber,COUNT*作为资产测试的计数 来自TblCassetteTestSheet 按订单号c分组 关于j.OrderNumber=c.OrderNumber 左连接 选择OrderNumber,COUNT*作为SentinelTests的计数 来自TBL连续测试表 按订单号分组 关于j.OrderNumber=s.OrderNumber 左连接 选择OrderNumber,COUNT*作为HuvTests的计数 从TblHUVTestSheet 按订单号h分组 关于j.OrderNumber=h.OrderNumber
应将样本数据和所需输出显示为有问题的文本,而不是图像。执行3个聚合查询,然后将这些查询连接到TblJobName。JobName不需要复制到工作表中。@6月7日谢谢您的输入,下次我将不使用图片。我已采纳了你的意见。请检查我的答案,并让我知道我是否可以以任何方式改进它。谢谢
SELECT TblJobName.OrderNumber, TblJobName.JobName
(
SELECT
Count(*)

FROM
TblHUVTestSheet

Where TblHUVTestSheet.OrderNumber=TblJobName.OrderNumber
) AS CountofHUVTests
FROM TblJobName LEFT JOIN TblHUVTestSheet ON TblJobName.OrderNumber = TblHUVTestSheet.OrderNumber
GROUP BY TblJobName.OrderNumber, TblJobName.JobName;