【问题标题】:Unpivot Access Data Table反透视访问数据表
【发布时间】:2022-06-20 04:55:17
【问题描述】:

下午好,

我想取消透视访问表。我在 Access 中有近 100 列,并且有一列带有 ID,我想取消透视,考虑除 de ID 之外的所有列到一个称为“类型”的列中(例如)。

我如何从 Access 获取它?不管是通过 SQL 查询还是 VBA。

先谢谢你了。

【问题讨论】:

  • 谢谢,但没有任何结果对我的问题有用。大多数人使用 Select... from... Union 解决它(由于大量的列,这是不可能的)或通过具有数字顺序或日期的列(1999、2000、2001 等)的 VBA 查询来解决它. 作为例子)。
  • 如果您已经尝试过其中一些方法,那么准确描述您尝试过的方法以及您在尝试这些方法时遇到的具体问题会很有用。在这里的人们提出你已经排除的事情毫无意义。

标签: sql vba ms-access unpivot


【解决方案1】:

似乎SELECT ... 的方法不适用于 OP,可以尝试使用“愚蠢”代码来实现。假设您有表tblSourcetblTarget,其中tblTarget 具有字段IDtypevalID 是tblSource 中的第一个字段。然后下面的代码将“unpivot”数据

Option Compare Database
Option Explicit

Sub stupidUnpivot()

    Dim db As Database
    Set db = CurrentDb
    Dim rsSrc As Recordset
    Set rsSrc = db.OpenRecordset("SELECT * FROM tblSource")
    
    Dim rsTrg As Recordset
    Set rsTrg = db.OpenRecordset("SELECT * FROM tblTarget")
    
    Dim i As Long
    
    rsSrc.MoveFirst
    
    Do
        With rsTrg
            ' every row in tblSoruce regardless of the number of columns
            ' will be written to tblTarget in the fields ID, type and val
            For i = 1 To rsSrc.Fields.Count - 1
                .AddNew
                .Fields("ID").Value = rsSrc.Fields(0).Value
                .Fields("type").Value = rsSrc.Fields(i).Name
                .Fields("val").Value = rsSrc.Fields(i).Value
                .Update
            Next i
        
        End With
        rsSrc.MoveNext
    Loop Until rsSrc.EOF

End Sub

【讨论】:

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