К сожалению, независимо от того, как сортируются объединенные таблицы, кросс-таблица по умолчанию будет сортировать столбцы в алфавитном порядке, поэтому апрель, декабрь, ... начинают порядок. Чтобы изменить или даже отфильтровать порядок столбцов в перекрестных таблицах, вы должны указать значения в предложении PIVOT Col IN ()
инструкции SQL.
Поскольку вам нужен динамический запрос, рассмотрите возможность создания querydef в VBA для обновления SQL за кросс-таблицей, где вы динамически обновляете предложение PIVOT Col IN ()
. Конечно, передайте даты начала и окончания по мере необходимости или по параметрам:
Public Sub BuildCrossTab()
Dim db As Database
Dim qdef As QueryDef
Dim strSQL As String, dates As String
Dim i As Integer, monthsDiff As Integer
Set db = CurrentDb
' DELETE PREVIOUS SAVED QUERY
For Each qdef in db.QueryDefs
If qdef.Name = "AccuralsCrosstabQ" Then
db.Execute "DROP Table " & qdef.Name, dbFailOnError
End If
Next qdef
' LOOP THROUGH ALL MONTHS BACKWARDS
dates = "("
monthsDiff = DateDiff("m", #7/1/2016#, #12/1/2016#)
For i = monthsDiff To 0 Step -1
dates = dates & " '" & Format(DateAdd("m", i, #7/1/2016#), "mmm-yyyy") & "',"
Next i
dates = dates & ")"
dates = Replace(dates, ",)", ")")
' PREPARE SQL STRING
strSQL = "TRANSFORM SUM(a.[Amount $]) AS SumAmount" _
& " SELECT a.Company, a.[Accrual ID], SUM(a.[Amount $]) As [Total Amount $]" _
& " FROM [Accruals Raw Data] a " _
& " GROUP BY a.Company, a.[Accrual ID]" _
& " PIVOT Format(a.[Posted Date], ""mmm-yyyy"")" _
& " IN " & dates
' CREATE QUERY
Set qdef = db.CreateQueryDef("AccuralsCrosstabQ", strSQL)
Set qdef = Nothing
Set db = Nothing
End Sub
person
Parfait
schedule
16.01.2017
yyyy-mm
. - person Gustav   schedule 16.01.2017