交叉表查询中的日期顺序 - 使用分隔 Table 进行排序

Date Order in Cross Tab Query - use Separate Table to Sort

我有一个交叉表查询,其中列中的字段具有 'mmm-yyyy' 格式的日期。

我使用下面的设计来创建查询。

Cross Tab Design View

我遇到的问题是日期没有按降序从 12 月 17 日到 7 月 16 日正确排序。这将是一个动态查询,每月都会更改月份,因此我想使用额外的 table 数据进行排序(而不是在属性 window 中输入月份名称列表) .

请问我该如何修复我的查询才能让它执行此操作?

感谢您的帮助

不幸的是,无论连接表如何排序,交叉表默认都会按字母顺序对列进行排序,因此 Apr, Dec, ...开始订单。要更改甚至过滤交叉表中的列顺序,您可以在 SQL 语句的 PIVOT Col IN () 子句中指定值。

由于您需要动态查询,请考虑在 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