将具有单独日期范围的表格组合在一起而不重叠数据 - 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的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中检测和合并日期范围的连续重叠

将多个DataFrame与偶尔重叠组合在一起

核心数据 - 查找具有重叠日期范围的记录

显示具有动态尺寸的标签,如表格而不重叠

DataTables+Datepicker 按日期范围过滤表格

SQL 重叠日期范围