透视多个字段并从Access导出

时间:2013-10-14 01:05:50

标签: sql vba ms-access ms-access-2007 access-vba

我为制造工厂构建了一个访问应用程序,并为他们提供了一个报告,列出了流程中的不同数据点。我有办法生成如下所示的报告。

 Batch     Zone    Value1     Value 2   etc.
 25        1       5          15
 25        2       12         31
 26        1       6          14 
 26        2       10         32

但是,需要以不同的格式查看数据。他们希望每批一行,所有数据都是水平的。像这样......

                Zone 1                Zone 2
 Batch     Value1     Value2     Value1     Value2
 25        5          15         12         31
 26        6          14         10         32

如果在第二个示例中显示,则总共将有157列。有7个唯一的字段名称,但其余的是14种不同的重复数据类型。我不能得到一个查询来以他们想要的格式显示数据,这是因为字段名称是相同的,但是第一种方式并不难。我可以使用VBA将数据插入到表格中,但是我不能使用重复的字段名称,所以当我将其导出到Excel时,字段名称不会表示任何意义,并且可以使用V'部分(如zone1,zone2等)我可以将报告链接到此,但报告宽度只能是22",所以我必须导出然后对excel表进行一些vba处理另一端以清晰的方式显示。

我可以将数据转换为格式#1,有什么方法可以根据批号在一个长行中显示数据?有没有其他人对如何做到这一点有很好的了解?

对任何建议持开放态度。谢谢!

1 个答案:

答案 0 :(得分:5)

在你的问题中,你说

  

我有办法生成一个类似于以下内容的报告

然后将数据列为

Batch  Zone  Value1  Value2
-----  ----  ------  ------
   25     1       5      15
   25     2      12      31
   26     1       6      14
   26     2      10      32

现在也许数据可能已经在某个地方处于“非旋转”形式(在不同的行中具有不同的Value),但如果没有,那么您将使用类似以下查询的内容来实现

SELECT 
    [Batch],
    "Zone" & [Zone] & "_" & "Value1" AS [ValueID],
    [Value1] AS [ValueValue]
FROM BatchDataByZone
UNION ALL
SELECT 
    [Batch],
    "Zone" & [Zone] & "_" & "Value2" AS [ValueID],
    [Value2] AS [ValueValue]
FROM BatchDataByZone

...返回:

Batch  ValueID       ValueValue
-----  ------------  ----------
   25  Zone1_Value1           5
   25  Zone2_Value1          12
   26  Zone1_Value1           6
   26  Zone2_Value1          10
   25  Zone1_Value2          15
   25  Zone2_Value2          31
   26  Zone1_Value2          14
   26  Zone2_Value2          32

但是,如果您将该查询保存为[BatchDataUnpivoted],那么您可以使用简单的交叉表查询来“逐出”每个批处理的值...

TRANSFORM Sum(BatchDataUnpivoted.[ValueValue]) AS SumOfValueValue
SELECT BatchDataUnpivoted.[Batch]
FROM BatchDataUnpivoted
GROUP BY BatchDataUnpivoted.[Batch]
PIVOT BatchDataUnpivoted.[ValueID];

...返回...

Batch  Zone1_Value1  Zone1_Value2  Zone2_Value1  Zone2_Value2
-----  ------------  ------------  ------------  ------------
   25             5            15            12            31
   26             6            14            10            32