【发布时间】:2011-12-22 03:11:39
【问题描述】:
我在 MS Access 2007 中有一个数据表。每条记录有 6 个字段,数千条记录。我想制作一种类似于对象的数据透视表。也就是说,如果前 4 个字段中的任意两行恰好相同,那么它们最终将组合成一行。此数据透视表中的列标题将是第 5 个字段的值,数据透视表中的值将是第 6 个字段,即美元金额。将第 5 个字段想象为字母 A、B、C、D、E、F、G。因此,我开始的表格可能在第 5 个字段中有一行 A,第 6 个字段有 3.48 美元。另一行可能匹配前 4 个字段,第 5 个字段为 B,第 6 个字段为 $8.59。另一个可能在前 4 个字段中匹配,在第 5 个字段中有 E,在第 6 个字段中有 $45.20。我希望将所有这些行变成一行(在新表中),从它们匹配的前 4 个字段开始,然后列出 $3.48、$8.59、$0.00、$0.00、$45.20、$0.00、$0.00,对应于列标题 A, B、C、D、E、F、G(由于没有包含 C、D、F、G 的记录,因此它们的对应值为 0.00 美元),然后以另外一个字段结束,该字段总计该行的金额。
目前,我有一些 VBA 代码可以做到这一点,几年前由其他人编写。它非常慢,我希望有更好的方法。我问了一个先前的问题(但不是很清楚,所以我被建议创建一个新问题),我问在 VBA 中是否有更好的方法来做到这一点。我的问题是关于通过 VBA 在 Access 中一次读取和写入大量数据,我知道这是 Excel 中的一个好习惯。也就是说,我希望使用我的原始表格并一次将整个内容分配给一个数组(如在 Excel 中,而不是逐个单元格),然后在 VBA 中使用该数组并创建一些新数组,然后编写将整个数组一次全部放到一个新表中(而不是逐个记录,逐个字段)。从该问题的答案来看,在 Access 中似乎不太可能,但我最好的选择可能是使用某种查询。我尝试了查询向导,发现交叉表查询与我上面描述的很接近。但是,行标题中似乎最多使用 3 个字段,而这里我有 4 个。而且,当未指定值时(如上面示例中的 C、D、F、G),而不是放入 $0.00,它只是留下一个空白。
更新(响应 Remou 提供示例数据的评论):这是一些示例数据。
ID a b c d e f
7 1 2 3 5 A 5
8 1 2 3 5 B 10
9 1 2 3 5 C 15
10 1 2 3 5 D 20
11 1 2 3 5 E 25
12 1 2 4 4 A 16
13 1 2 4 4 B 26
14 1 3 3 7 D 11
15 1 3 3 7 B 11
结果应该是:
a b c d an bn cn dn en Total
1 2 3 5 5 10 15 20 25 75
1 2 4 4 16 26 0 0 0 42
1 3 3 7 0 11 0 11 0 22
但是,当我复制并粘贴 Remou 给出的 SQL 时,我得到的唯一输出是
a b c d an bn cn dn en
1 2 3 5 5 10 15 20 25
【问题讨论】: