具有多个数据源的报告中的数据输出

时间:2017-08-28 09:10:20

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

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

首先,我有这些表:

表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-Query来获取我想要的报告,或者通过操作数据字段来处理VBA中的多个数据源

1 个答案:

答案 0 :(得分:0)

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

相关问题