将具有单独日期范围的表格组合在一起而不重叠数据 - Access
Posted
技术标签:
【中文标题】将具有单独日期范围的表格组合在一起而不重叠数据 - Access【英文标题】:Combine Tables with Separate Date Range without overlapping data - Access 【发布时间】:2017-12-29 20:01:30 【问题描述】:我不太清楚如何词组这个问题,因为它可能无法在Access做(与我有限的知识和查询和表关系的广泛的研究)。不幸的是我无法显示,因为敏感数据的截图,但我会尽我所能用的字符来表达吧。 P>
我想两个简单的查询只拉商人谁是某一特定日期范围的出(逾期认证)相结合。商家可以是逾期扫描和他们的SAQ。我可以很容易地为每一个两个单独的查询,但我想知道如果它可以运行一个查询,将包括。
的我有什么示例:
商户帐户| DBA名称| ECM名称| SAQ到期日期强>
0000000亿.... XXXX XXXX ........... ...........二○一三年十月一十日 P>
商户帐户| DBA名称| ECM名称|扫描,由于日期强>
111111111111111111..ZZZZ ............. ZZZZ ............. 2012/1/12 P> 上的简单查询1000个标准参数 -
我已按日期()和日期之间设置()来实现上述。我的目标是产生下面的; P>
商户帐户| DBA名称| ECM名称| SCAN截止日期| SAQ到期日期强>
111111111111111111..ZZZZ ............. ZZZZ ............. 2012/1/12 ........... .. NULL / NO DATA em>的
0000000000000000..XXXX ........... XXXX ........... NULL / NO DATA EM> ..... 10/10 / 2013
老实说它可能是更容易导出查询和手动复制/粘贴列,但我不知道是否有可能用更少的步骤来完成它! : - ] P>
目标:
从同时具有扫描和SAQ列的表2个拉查询 LI> 拉从当前日期开始日期过期 LI> 从重叠的数据,从而有效地增加信息,而不是结合副歌 LI>的事情,我曾尝试:
联合查询 LI> 加入查询 LI> 用参数进行实验 LI>谢谢!
修改 EM> 强>
SELECT [Overall Status Report].[Merchant Account Number], [Overall Status Report].[DBA Name], [Overall Status Report].[PCI Contact Name], [Overall Status Report].[PCI Contact Number], [Overall Status Report].[Email address], [Overall Status Report].[ECM Name], [Overall Status Report].[ECM Email], [Overall Status Report].[SAQ Due Date]
FROM [Overall Status Report]
WHERE ((Not ([Overall Status Report].[ECM Name])="ACCOUNT CLOSED") AND (([Overall Status Report].[SAQ Due Date]) Between Date() And Date()-1000))
UNION
SELECT [Overall Status Report].[Merchant Account Number], [Overall Status Report].[DBA Name], [Overall Status Report].[PCI Contact Name], [Overall Status Report].[PCI Contact Number], [Overall Status Report].[Email address], [Overall Status Report].[ECM Name], [Overall Status Report].[ECM Email], [Overall Status Report].[Scan Due Date]
FROM [Overall Status Report]
WHERE ((Not ([Overall Status Report].[ECM Name])="ACCOUNT CLOSED") AND (([Overall Status Report].[Scan Due Date]) Between Date() And Date()-1000));
这个伟大的工程,但它不SAQ数据和扫描数据分成两个单独的列,因此很难知道哪一个商家是姗姗来迟。
编辑2: EM> 强>
SELECT [Overall Status Report].[Merchant Account Number], [Overall Status Report].[DBA Name], [Overall Status Report].[PCI Contact Name], [Overall Status Report].[PCI Contact Number], [Overall Status Report].[Email address], [Overall Status Report].[ECM Name], [Overall Status Report].[ECM Email], NULL AS [Overall Status Report].[SAQ Due Date], [Overall Status Report].[Scan Due Date]
FROM [Overall Status Report]
WHERE ((([Overall Status Report].[ECM Name])<>"ACCOUNT CLOSED") AND (([Overall Status Report].[SAQ Due Date]) Between Date() And Date()-1000) AND (([Overall Status Report].[Scan Due Date]) Between Date() And Date()-1000))
UNION
SELECT [Overall Status Report].[Merchant Account Number], [Overall Status Report].[DBA Name], [Overall Status Report].[PCI Contact Name], [Overall Status Report].[PCI Contact Number], [Overall Status Report].[Email address], [Overall Status Report].[ECM Name], [Overall Status Report].[ECM Email], [Overall Status Report].[SAQ Due Date], NULL AS [Overall Status Report].[Scan Due Date]
FROM [Overall Status Report]
WHERE ((([Overall Status Report].[ECM Name])<>"ACCOUNT CLOSED") AND (([Overall Status Report].[SAQ Due Date]) Between Date() And Date()-1000) AND (([Overall Status Report].[Scan Due Date]) Between Date() And Date()-1000));
【问题讨论】:
你试过SQL的UNION
? SPAN>
请具体说明在你尝试过什么(共享SQL)。你可能已经尝试了很多,但在尝试时可能会做出错误的。 SPAN>
我已经尝试了联合查询,但它下一个柱结合的数据。因此,可以说3招是逾期扫描,1 SAQ ...访问将包括所有五个与下一个列的正确日期,它可能说扫描或SAQ ...与在两个单独列有它 SPAN>
这是一个“完全外部连接” - 不立即在访问支持的概念。它是通过寻找左外连接的UNION完成加入,在相同的表右外连接。看到现有解决方案:***.com/questions/19615177/… 跨度>
【参考方案1】:
您需要将NULL
作为列名设置为:
SELECT [Merchant Account], [DBA Name], [ECM Name], NULL AS [SCAN Due Date], [SAQ Due Date]
FROM Table1
UNION
SELECT [Merchant Account], [DBA Name], [ECM Name], [SCAN Due Date], NULL AS [SAQ Due Date]
FROM Table2
【讨论】:
我试图修改我的代码以添加 NULL AS,但它给我的 SELECT 语句包含一个保留字或一个拼写错误或缺少错误的参数名称。我会将我的代码添加到我的帖子中以显示我所做的。 也许我需要 2 张桌子?【参考方案2】:正如您标记 mysql(而我手头没有 MS Access):
SELECT
OSR.merchantAccountNumber
, OSR.DBAName
, OSR.ECMName
, (SELECT OSR.SAQDueDate
FROM OverallStatusReport OSR2
WHERE OSR.merchantAccountNumber = OSR2.merchantAccountNumber
AND OSR2.SAQDueDate
BETWEEN DATE_SUB(NOW(), INTERVAL 3000 DAY) AND NOW()) AS SAQDueDate
, (SELECT OSR.SCANDueDate
FROM OverallStatusReport OSR3
WHERE OSR.merchantAccountNumber = OSR3.merchantAccountNumber
AND OSR3.SCANDueDate
BETWEEN DATE_SUB(NOW(), INTERVAL 3000 DAY) AND NOW()) AS SCANDueDate
FROM OverallStatusReport OSR
WHERE (NOT OSR.ECMName = 'ACCOUNT CLOSED')
AND ((SAQDueDate BETWEEN DATE_SUB(NOW(), INTERVAL 3000 DAY) AND NOW())
OR
(SCANDueDate BETWEEN DATE_SUB(NOW(), INTERVAL 3000 DAY) AND NOW())
)
;
它使用两个子选择来拉入各自的数据。
查看实际操作:SQL Fiddle。 (调整数据以证明这一概念。)
如果需要调整/进一步详细信息,请发表评论。
【讨论】:
以上是关于将具有单独日期范围的表格组合在一起而不重叠数据 - Access的主要内容,如果未能解决你的问题,请参考以下文章