如何生成此报告?

时间:2013-07-15 23:55:02

标签: sql ms-access crosstab

我正在尝试根据几个表格设置报告。

我有一张表Actual,如下所示:

+--------+------+
| status | date |
+--------+------+
| 5      | 7/10 |
| 8      | 7/9  |
| 8      | 7/11 |
| 5      | 7/18 |
+--------+------+

Targets如下所示:

+--------+-------------+--------+------------+
| status | weekEndDate | target | cumulative |
+--------+-------------+--------+------------+
|      5 | 7/12        |      4 |         45 |
|      5 | 7/19        |      5 |         50 |
|      8 | 7/12        |      4 |         45 |
|      8 | 7/19        |      5 |         50 |
+--------+-------------+--------+------------+

Actual所属的Targets.weekEndDate记录进行分组,我有以下汇总查询GroupActual

+-------------+------------+--------------+--------+------------+
| weekEndDate |    status  | weeklyTarget | actual | cumulative |
+-------------+------------+--------------+--------+------------+
| 7/12        | 5          |            4 |      1 |         45 |
| 7/12        | 8          |            4 |      2 |         41 |
| 7/19        | 5          |            5 |      1 |         50 |
| 7/19        | 8          |            4 |        |         45 |
+-------------+------------+--------------+--------+------------+

我正在尝试创建此报告:

+--------+------------+------+------+
| status | category   | 7/12 | 7/19 | ...etc for every weekEndDate entry in Targets
+--------+------------+------+------+
| 5      | actual     |   1  |    1 |
| 5      | target     |   4  |    5 |
| 5      | cumulative |  45  |   50 |
+--------+------------+------+------+
| 8      | actual     |   2  |      |
| 8      | target     |   4  |    5 |
| 8      | cumulative |  45  |   50 |
+--------------+------+------+------+

我可以使用交叉表查询来生成日期列,但我不确定如何为“实际”,“目标”和“累积”设置行。它们不是同一个表中的值,这意味着(我认为)交叉表查询对于此细分不会有用。我是否应该尝试更改GroupActual以便将数据放入我正在寻找的形状中?对于下一步该去哪里感到困惑...

编辑:根据PowerUser的解决方案,我在交叉表上取得了一些进展,但我遇到Target的问题。我修改了向导生成的SQL,试图得到我想要的东西,但它没有成功。我使用的GroupActual版只有weekEndDatestatusweeklyTarget列;这是SQL:

TRANSFORM weeklyTarget
SELECT status
FROM TargetStatus_forCrosstab_Target
GROUP BY status,weeklyTarget
PIVOT Format([weekEndDate],"Short Date");

1 个答案:

答案 0 :(得分:1)

你快到了。问题是您无法在单个交叉表中完成所有操作。您需要制作3个交叉表(一个用于'实际',一个用于'目标',一个用于'累积'),然后创建一个联合查询以将它们全部组合。

其他提示:在各个交叉表中,添加“排序”列。您的“实际”交叉表的排序值为1,“目标”的排序值为2,“累计”排序为3.这样,当您将它们合并在一起时,您可以按正确的顺序排列它们

相关问题