【发布时间】:2018-08-02 07:04:51
【问题描述】:
我有一张桌子有
Material 90 89 88 87 ….2 1 0
123456 34 30 26 38 14 12 8
123457 47 42 33 54 38 27 42
我想把它转换成
Date 123456 123457
Date()-90 34 47
Date()-89 30 42
Date()-88 26 33
Date()-87 38 54
…. ………… ………..
Date()-2 14 38
Date()-1 12 27
Date() 8 42
我找到了这个,但正在尝试弄清楚如何使用它:
Private Sub Unpivot_Click()
Dim x As Integer
Dim columncount As Integer
Dim setRST As DAO.Recordset
Dim sqlstr As String
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Set setRST = CurrentDb.OpenRecordset("Select * from TheTable")
columncount = setRST.Fields.Count
Set qdf = db.CreateQueryDef ("", "Insert Into TheDestination ([Template], [Row],
[Column], [Result]) VALUES (@Template, @RowNumber, @ColumnNumber, @Result)")
Do While Not setRST.EOF
qdf.Parameters("@Template") = setRST!Template
qdf.Parameters("@RowNumber") = setRST!row
For Each fld In setRST.Fields
If IsNumeric(fld.Name) Then
qdf.Parameters("@ColumnNumber") = fld.Name
qdf.Parameters("@Result") = fld.Value
qdf.Execute
End If
Next fld
setRST.MoveNext
Loop
End Sub
到目前为止,我有:
Public Function Unpivot()
Dim x As Integer
Dim columncount As Integer
Dim setRST As DAO.Recordset
Dim sqlstr As String
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Set setRST = CurrentDb.OpenRecordset("SSMaterialByDayQ322")
columncount = setRST.Fields.Count
Set qdf = db.CreateQueryDef("", "Insert INTO SSHistoryQ322 ([Date], [Row], [Column], [Result]) VALUES (@Template, @RowNumber, @ColumnNumber, @Result)")
Do While Not setRST.EOF
qdf.Parameters("@Template") = setRST!Date
qdf.Parameters("@RowNumber") = setRST!row
For Each fld In setRST.Fields
If IsNumeric(fld.Name) Then
qdf.Parameters("@ColumnNumber") = fld.Name
qdf.Parameters("@Result") = fld.Value
qdf.Execute
End If
Next fld
setRST.MoveNext
Loop
End Function
【问题讨论】:
-
那么——问题是什么?你在哪一行得到什么信息,或者结果是什么样的?出现该消息时的值是什么?
-
更多重复,google access query transpose
-
我怀疑使用 QueryDefs 创建/修改查询能否实现这一点。您需要将数据保存到表中。 Material 有多少个可能的值?表有 255 个字段的限制。
-
在 Set qdf = db.createquerydef("", "insert into.... 我得到 Object Required。