SQL 在 MS Access 中将行转换为列的查询 table
SQL query to transpose rows to columns in MS Access table
我有以下 MS Access 2010 table(不,F1 F2 是 headers):
No F1 F2
1 a1 b1
2 a1 b2
3 a3 b3
4 a4 b4
5 a5 b5
6 a6 b6
我需要一个 SQL 查询来执行列到行的转置操作以获得以下输出:
1 2 3 4 5 6
a1 a2 a3 a4 a5 a6
b1 b2 b3 b4 b5 b6
谢谢,
M.R。
不幸的是,Access 没有像 MS SQL 中的 UNPIVOT
那样的 SQL 函数,因此对于转置,您可以使用 UNION SQL,子查询的数量等于源 table 中的列,或者您可以使用这样的 VBA 代码:
Dim f As Variant
Dim i As Long
Dim j As Long
With CurrentDb.OpenRecordset("SELECT * FROM TableSrc")
.MoveLast
.MoveFirst
f = .GetRows(.RecordCount)
End With
With CurrentDb.OpenRecordset("SELECT * FROM TableDest")
For i = 0 To UBound(f)
.AddNew
For j = 0 To UBound(f, 2)
.Fields(j) = f(i, j)
Next j
.Update
Next i
End With
函数GetRows
将整个table加载到二维数组中,然后将该数组卸载到目标table
我有以下 MS Access 2010 table(不,F1 F2 是 headers):
No F1 F2
1 a1 b1
2 a1 b2
3 a3 b3
4 a4 b4
5 a5 b5
6 a6 b6
我需要一个 SQL 查询来执行列到行的转置操作以获得以下输出:
1 2 3 4 5 6
a1 a2 a3 a4 a5 a6
b1 b2 b3 b4 b5 b6
谢谢, M.R。
不幸的是,Access 没有像 MS SQL 中的 UNPIVOT
那样的 SQL 函数,因此对于转置,您可以使用 UNION SQL,子查询的数量等于源 table 中的列,或者您可以使用这样的 VBA 代码:
Dim f As Variant
Dim i As Long
Dim j As Long
With CurrentDb.OpenRecordset("SELECT * FROM TableSrc")
.MoveLast
.MoveFirst
f = .GetRows(.RecordCount)
End With
With CurrentDb.OpenRecordset("SELECT * FROM TableDest")
For i = 0 To UBound(f)
.AddNew
For j = 0 To UBound(f, 2)
.Fields(j) = f(i, j)
Next j
.Update
Next i
End With
函数GetRows
将整个table加载到二维数组中,然后将该数组卸载到目标table