【问题标题】:Data Output in a report with multiple datasources具有多个数据源的报表中的数据输出
【发布时间】:2018-02-05 12:23:47
【问题描述】:

首先,如果这个问题已经得到解答,我想道歉,但我无法通过搜索找到任何与我的问题相关的有用信息,因为我不知道问题的确切名称。

首先,我有这些表:

表 A:

ID | Title | many more fields
------------------------------
1 | title1 | .... 
2 | title2 | ....
...

表 B:

ID | project_ID | Date B | many more fields
-------------------------------------------
1 | 1 | 01.01.2017
2 | 1 | 01.02.2017
3 | 1 | 01.03.2017
4 | 2 | 02.01.2017
5 | 1 | 01.05.2017
6 | 3 | 01.03.2017
...

表 C:

ID | project_ID | Date C | many more fields
-------------------------------------------
1 | 1 | 01.01.2017
2 | 2 | 03.04.2017
3 | 2 | 11.10.2017
4 | 3 | 05.01.2017
5 | 1 | 06.02.2017
6 | 2 | 07.08.2017
...

表 D:

ID | project_ID | Date D | many more fields
-------------------------------------------
1 | 1 | 02.02.2017
2 | 2 | 03.03.2017
3 | 3 | 11.11.2017
4 | 1 | 04.04.2017
5 | 1 | 06.06.2017
6 | 2 | 07.07.2017
...

我的目标是一个看起来像这样的报告:

Title1
-------------------------------------------
Date B     | Date C     | Date D
01.01.2017 | 01.01.2017 | 03.03.2017
01.02.2017 | 06.02.2017 | 04.04.2017
01.03.2017 |            | 06.06.2017
01.05.2017 | 


Title2
-------------------------------------------
Date B     | Date C     | Date D
02.01.2017 | 03.04.2017 | 02.02.2017
           | 11.10.2017 | 07.07.2017
           | 07.08.2017

...

最好的结果是使用“Access Report Builder”,我得到了类似的东西:

Date B     | Date C     | Date D     | Misc
01.09.2017 | 28.08.2017 | 24.08.2017 | Title 1
01.09.2017 | 28.08.2017 | 25.08.2017 | Title 1
01.09.2017 | 28.08.2017 | 26.08.2017 | Title 1
01.09.2017 | 29.08.2017 | 24.08.2017 | Title 1
01.09.2017 | 29.08.2017 | 25.08.2017 | Title 1
01.09.2017 | 29.08.2017 | 26.08.2017 | Title 1

但正如您所见,它重复了不应该发生的日期。即使隐藏重复项,它也只会隐藏它们。日期 D 仍会显示重复。

上周我什至得到了这样的东西:

SQL:

SELECT
    P.ID,
    P.title,
    P_kov.ko_date AS dateKOV,
    CVAR(NULL) AS dateAP,
    CVAR(NULL) AS dateEP
FROM
    P
LEFT JOIN
    P_kov ON P.ID = P_kov.id_projekt

UNION

SELECT
    P.ID,
    P.title,
    CVAR(NULL) AS dateKOV,
    CVAR(NULL) AS dateAP,
    P_ep.ep_date AS dateEP
FROM
    P
LEFT JOIN
    P_ep ON P.ID = P_ep.id_projekt

UNION

SELECT
    P.ID,
    P.title,
    CVAR(NULL)  AS dateKOV,
    P_ap.ap_date AS dateAP,
    CVAR(NULL)  AS dateEP
FROM
    P
LEFT JOIN
    P_ap ON P.ID = P_ap.id_projekt;

注意:我使用了 CVAR,因为似乎 Date 不能为 NULL

结果:

Date KOV   | Date AP    | Date EP    | title
01.09.2017 |            |            | Title 1
02.09.2017 |            |            | Title 1
           | 28.08.2017 |            | Title 1
           | 29.08.2017 |            | Title 1
           |            | 25.08.2017 | Title 1
           |            | 26.08.2017 | Title 1

但遗憾的是,报告将每个空白字段都打印为新行。而且我在 VBA 方面的技能也不是很好,我无法弄清楚如何将结果放入数组并将“清理”的值放入文本字​​段中。

TLDR:我需要一个 SQL 查询,它可以让我得到我想要的报告,或者一种在 VBA 中通过操纵数据字段来处理多个数据源的方法

【问题讨论】:

  • 为什么要尝试在单个报告中执行此操作?您可以只基于 TableA 创建一个报表,并为 TableB、TableC 和 TableD 添加子报表。这可以生成所需的输出,而无需编写困难的 SQL 查询。
  • 你好,Erik,这就是tipp - 我试过了,在发现报告的分组是如何工作的(codenovice 的评论也有帮助)你的带有子报告的tipp 就像一个魅力 - 非常感谢

标签: sql arrays sorting ms-access ms-access-2010


【解决方案1】:

不需要 vba。假设 B、C 和 D 的更多字段相同,则在查询构建器中构建一个查询,所有四个表仅通过项目将 B-D 连接到 A。然后使用报告中的组按项目 ID 和组标题中的标题进行分组。您应该能够将日期 B、C、D 标题放在详细信息部分标题中并得到您想要的。

【讨论】:

  • 你好 codenovice31415,我再次尝试了你的建议,但我得到的结果与我在“最好的结果是使用“访问报告生成器”下写的相同:“-很多”将显示的重复”条目(如果隐藏,则保留为“空单元格”。所以我尝试了 Erik von Asmith 的解决方案,该解决方案有效,但仅与您对报告分组的提示相结合。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多