A Pivot Table [ Crosstab Query ] was needed that could handle three ( 3 ) changing primary keys. Here is an example - entirely in Code.
Additional Code Examples

Function Cross_tab()

Dim dbs As DAO.Database, rst As DAO.Recordset, qdf As QueryDef, MdlID As Field

Dim x As String, y As String, ftr As String, mrkt As String, strSOA As String

Dim sql As String, sql1 As String, sql2 As String, sql3 As String, sql4 As String, sql5 As String

DoCmd.SetWarnings False

DoCmd.OpenQuery "qxt_FtrToModel_Clear"

DoCmd.SetWarnings True

Set dbs = CurrentDb

Set rst = dbs.OpenRecordset("qxt_FtrToModel")

For Each qdf In dbs.QueryDefs

    If qdf.Name = "qxt_Insert" Then dbs.QueryDefs.Delete qdf.Name

Next qdf

Do Until rst.EOF

    ftr = rst![FtrID]

    mrkt = rst![Market]

    sql1 = "INSERT INTO tbl_qxt_FtrToModel (FtrID, Market"                         '' Building SQL "Header/Columns"

    sql2 = ") VALUES " + "('" + ftr + "', " + "'" + mrkt + "'"                               ''  . . . "Values"

    sql3 = ");"

    x = rst![FtrID]

    y = rst![Market]

        Do While x = ftr

            Set MdlID = rst![Model_ID]

            strSOA = rst![SOA]

            mrkt = rst![Market]

            sql1 = sql1 + ", " + MdlID + ""                                                                 '' Adding "Columns"

            'Debug.Print mrkt

            'Debug.Print "sql1 = " + sql1

            sql2 = sql2 + ", '" + strSOA + "'"                                                              ''  . . . "Values"

            'Debug.Print "sql2 = " + sql2

            rst.MoveNext

            If rst.EOF = True Then Exit Do

            ftr = rst![FtrID]

            mrkt = rst![Market]

            If y <> mrkt Then Exit Do

        Loop

    sql = sql1 + sql2 + sql3

    'Debug.Print sql

    Set qdf = dbs.CreateQueryDef("qxt_Insert", sql)

    qdf.Execute

    dbs.QueryDefs.Delete "qxt_Insert"

If rst.EOF = True Then

    rst.Close

    Set dbs = Nothing

    Exit Function

End If

Loop

End Function