交叉表查询中的日期顺序 - 使用单独的表进行排序
Posted
技术标签:
【中文标题】交叉表查询中的日期顺序 - 使用单独的表进行排序【英文标题】:Date Order in Cross Tab Query - use Separate Table to Sort 【发布时间】:2017-01-16 02:10:53 【问题描述】:对于列中的字段,我有一个带有“mmm-yyyy”格式日期的交叉表查询。
我使用下面的设计来创建查询。
Cross Tab Design View
我遇到的问题是日期从 12 月 17 日到 7 月 16 日的降序排列不正确。这将是一个动态查询,每个月都会更改月份,因此我想使用额外的数据表进行排序(而不是在“属性”窗口中输入月份名称列表)。
我将如何修复我的查询以使其执行此操作?
感谢您的帮助
【问题讨论】:
一种选择是使用可以正确排序的格式来格式化日期,例如:yyyy-mm
。
【参考方案1】:
不幸的是,无论连接表如何排序,交叉表默认按字母顺序对列进行排序,因此 Apr, Dec, ... 开始排序。要更改甚至过滤交叉表中的列顺序,您可以在 SQL 语句的PIVOT Col IN ()
子句中指定值。
由于您需要动态查询,请考虑在 VBA 中创建一个 querydef 来更新交叉表后面的 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
【讨论】:
谢谢 Parfait 我现在就试试这个。以上是关于交叉表查询中的日期顺序 - 使用单独的表进行排序的主要内容,如果未能解决你的问题,请参考以下文章