Sql MS Access 2016-在复杂查询中从单独的表中提取客户端名称
我有三个表用于漏洞扫描作业:客户、授权表单和扫描。关系是从左到右的一对多关系。我以前有与客户端直接相关的扫描,但实现了forms表以添加防止未经授权扫描的功能。我有一个下面的查询,它提取最近和下一次扫描的日期(非常感谢@donPablo),但是当我在表中进行更改时,我不再从customers表中提取正确的数据。我不太确定如何修复它Sql MS Access 2016-在复杂查询中从单独的表中提取客户端名称,sql,ms-access,ms-access-2016,Sql,Ms Access,Ms Access 2016,我有三个表用于漏洞扫描作业:客户、授权表单和扫描。关系是从左到右的一对多关系。我以前有与客户端直接相关的扫描,但实现了forms表以添加防止未经授权扫描的功能。我有一个下面的查询,它提取最近和下一次扫描的日期(非常感谢@donPablo),但是当我在表中进行更改时,我不再从customers表中提取正确的数据。我不太确定如何修复它 SELECT u.Customer_Company, z.* FROM (Select NZ(a.Scan_Data.Customer_ID, b.Sca
SELECT u.Customer_Company, z.*
FROM (Select
NZ(a.Scan_Data.Customer_ID, b.Scan_Data.Customer_ID) as Customer,
aPast as Past,
aFuture as Future,
DATEDIFF("d", aPast, aFuture) as Difference
FROM
(Select Scan_Data.Customer_ID, Max(Scan_Date) as aPast from Scan_Data where Scan_Date <= DATE() Group By Scan_Data.Customer_ID) a
LEFT JOIN
(Select Scan_Data.Customer_ID, Min(Scan_Date) as aFuture from Scan_Data where Scan_Date > DATE() Group By Scan_Data.Customer_ID) b
ON a.Scan_Data.Customer_ID = B.Scan_Data.Customer_ID
UNION
Select
NZ(a.Scan_Data.Customer_ID, b.Scan_Data.Customer_ID) as Customer,
aPast as Past,
aFuture as Future,
DATEDIFF("d", aPast, aFuture) as Difference
FROM
(Select Scan_Data.Customer_ID, Max(Scan_Date) as aPast from Scan_Data where Scan_Date <= DATE() Group By Scan_Data.Customer_ID) a
RIGHT JOIN
(Select Scan_Data.Customer_ID, Min(Scan_Date) as aFuture from Scan_Data where Scan_Date > DATE() Group By Scan_Data.Customer_ID) b
ON a.Scan_Data.Customer_ID = B.Scan_Data.Customer_ID
) AS z LEFT JOIN Customer_Data AS u ON cint(z.Customer) = cint(u.Customer_ID);
Form_数据表:
.Customer_ID | .Customer_Name | etc.
1 | Microsoft |
2 | Reddit |
.Form_ID | .Signature_Date | .Expiration_Date | .Customer_ID
1 | 01-Jan-19 | 01-Jan-20 | 2/Reddit
2 | 15-May-18 | 15-May-21 | 1/Microsoft
.Scan_ID | .Scan_Title | .Scan_Date | .Customer_ID
1 | First MS 19052018 | 19-May-18 | 1/2/Reddit
2 | First R 05012019 | 05-Jan-19 | 2/1/Microsoft
扫描数据表:
.Customer_ID | .Customer_Name | etc.
1 | Microsoft |
2 | Reddit |
.Form_ID | .Signature_Date | .Expiration_Date | .Customer_ID
1 | 01-Jan-19 | 01-Jan-20 | 2/Reddit
2 | 15-May-18 | 15-May-21 | 1/Microsoft
.Scan_ID | .Scan_Title | .Scan_Date | .Customer_ID
1 | First MS 19052018 | 19-May-18 | 1/2/Reddit
2 | First R 05012019 | 05-Jan-19 | 2/1/Microsoft
上面的扫描数据显示了我的问题。Scan_Data.Customer_ID字段中的数字是其他两个表中的PK。.Customer\u ID字段根据表单ID而不是实际的客户ID提取客户ID。它应该如下所示:
.Scan_ID | .Scan_Title | .Scan_Date | .Customer_ID
1 | First MS 19052018 | 19-May-18 | 2/1/Microsoft
2 | First R 05012019 | 05-Jan-19 | 1/2/Reddit
编辑问题以将示例数据发布为文本表(不是图像)。问题已编辑。我希望这是可以理解的。什么是表格-纸质文件?为什么扫描数据客户ID字段有2个数字?到底是什么保存到该字段中,以及如何输入?这不应该是作为外键的表单ID吗?毕竟,您不扫描文档而不是客户端吗?还有,为什么表单数据和扫描数据需要是单独的表?他们是否有一对一的关系?表格是我们执行扫描的授权。一家公司将有许多表格,每个表格将有许多扫描。一次扫描将有一个表格和一个公司。