【问题标题】:Pivot on multiple fields and export from Access透视多个字段并从 Access 导出
【发布时间】:2013-10-21 12:57:00
【问题描述】:

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

 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 时,字段名称没有任何意义,并且不能有部分(如 zone1 ,zone2等)我可以将报告链接到此,但报告宽度只能是22“,所以我必须导出然后对另一端的excel表进行一些vba处理才能以清晰的方式显示.

我可以将数据转换为#1 格式,有什么方法可以根据批号将数据显示在一个长行中?有其他人知道这是如何实现的吗?

接受任何建议。谢谢!

【问题讨论】:

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


    【解决方案1】:

    在你的问题中你这么说

    我有办法生成如下所示的报告

    然后将数据列为

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

    现在也许数据可能已经在某处处于“未透视”的形式(不同的 Values 在不同的行中),但如果不是,那么您将使用类似于以下查询的内容来实现这一点

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多