简体   繁体   中英

How to transpose Field in in MS ACCESS

I have a table with 52 columns now I need to transpose columns which contain Date

Input:

2009 2010 2011 2012

30    50  60   80

Output:

Year         Values

2009         30

2010         50

2011         60

2012         80

Suggestion 1 : Copy the data out, stick it in excel, then copy and Paste-Special>>Transpose. Then copy it back into a new table in Access

Suggestion 2 : VBA. Assuming your table has a single record with many many many fields something like the following would work:

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 has the single record with many many fields. Table2 has two fields ( YEAR and VALUE )

Suggestion 3 : 1 Really really horrible UNION query:

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 

Conclusion : All of these are terrible, but so is your data. The excel solution is very manual and excel might destroy your data (removing leading 0's, converting date formats, other awful things). Solution 2 means you have to write and maintain VBA... and Solution 3 is just a pain to write and isn't easily repeatable if you have other similar tables, but with different data that you need to unpivot.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM