2017-08-28 47 views
1

首先,我想道歉,如果此问题已得到解答,但通过搜索找不到与我的问题有关的任何有用信息,因为我不知道确切的问题的名称。具有多个数据源的报告中的数据输出

首先,我有这些表:

表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 

... 

最好的结果与“访问报表生成器”在那里我得到的东西,如:

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 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多个数据源与操纵数据字段

+1

为什么要在单个报告中做到这一点?您可以根据TableA创建报表,并为TableB,TableC和TableD添加子报表。这可以生成所需的输出,而无需编写困难的SQL查询。 –

+0

你好Erik, thatnks for the tipp - 我试了一下,发现如何分组报告的工作(codenovice的评论也帮助)你的tipp与子报表工作像一个魅力 - 非常感谢 – Thorburn

回答

0

不需要VBA。假设B,C和D的许多字段是相同的,在查询生成器中构建一个查询,所有四个表只将B-D连接到A上。然后使用报告中的组按项目标识进行分组,并在组标题中标题。您应该可以将日期B,C,D标题放入详细信息标题标题中,并获取所需内容。

+0

你好codenovice31415, 我试过你的建议,但我得到了同样的结果,我写在“最好的结果是与”访问报告生成器“,我得到这样的东西:” - 大量的“重复”条目将被显示(或保留为“空细胞“如果隐藏。所以我尝试了Erik von Asmith的解决方案,但是只有将你的报告组合起来。 – Thorburn