【问题标题】:How to transpose Field in in MS ACCESS如何在 MS ACCESS 中转置字段
【发布时间】:2015-04-16 13:05:56
【问题描述】:

我有一个包含 52 列的表,现在我需要转置包含日期的列

输入:

2009 2010 2011 2012

30    50  60   80

输出:

Year         Values

2009         30

2010         50

2011         60

2012         80

【问题讨论】:

  • 这些列是否包含数据?
  • 如果是,您想以哪种形式更改该数据?
  • 是的,它们确实包含数据
  • 它们包含数字数据,一种方法是通过联合来实现,但这里的列数非常多。
  • 您想要一个查询,它会在一行中返回您的表格列的名称,还是您想要以某种方式旋转表格?如果您想进行数据透视,请提供一个小示例,其中包含表中的数据以及您希望看到的结果。

标签: sql ms-access-2013


【解决方案1】:

建议一:将数据复制出来,粘贴到excel中,然后复制粘贴-特殊>>转置。然后将其复制回Access中的新表中

建议 2:VBA。假设您的表有一条记录,其中包含许多许多字段,如下所示:

Sub transpose()
    Dim rs As Recordset
    Dim rsField As Field
    Dim db As Database
    Dim StrSQL As String

    Set db = CurrentDb

    Set rs = db.OpenRecordset("SELECT * FROM Table1", dbOpenTable)

    'Assuming that there is only 1 record
    For Each rsField In rs.Fields
        StrSQL = "INSERT INTO Table2 VALUES ('" & rsField.Name & "'," & rsField.Value & ");"
    Next rsField

End Sub

Table1 有很多字段的单一记录。 Table2 有两个字段(YEARVALUE

建议 3:1 真的很可怕的 UNION 查询:

SELECT "2009" as year, [2009] as value FROM Table1 
UNION ALL
SELECT "2010" as year, [2010] as value FROM Table1 
UNION ALL
SELECT "2011" as year, [2011] as value FROM Table1 
UNION ALL
SELECT "2012" as year, [2012] as value FROM Table1 

结论:所有这些都很糟糕,但您的数据也很糟糕。 excel 解决方案非常手动,excel 可能会破坏您的数据(删除前导 0、转换日期格式、其他可怕的事情)。解决方案 2 意味着您必须编写和维护 VBA……而解决方案 3 编写起来很麻烦,并且如果您有其他类似的表,但需要取消透视的不同数据,则不容易重复。

【讨论】:

  • 好建议。尽管典型的“un-pivot”解决方案是 UNION 查询,但在这种情况下,选项 2 (VBA) 可能更受欢迎,因为有大量源列选项 1(Excel 转置)会很乏味,而选项 3(丑陋) UNION) 可能会出现“查询过于复杂”的错误。
猜你喜欢
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2011-04-01
相关资源
最近更新 更多