에 대한
덕분에 불행하게도 상관없이 조인 된 테이블이 정렬 방식을, 크로스 탭은 따라서 4월, 12월이 ... 순서를 시작, 알파벳 순서로 기본적으로 열을 정렬하지 않습니다. 크로스 탭에서 열 순서를 변경하거나 필터링하려면 SQL 문의 PIVOT Col IN()
절에 값을 지정합니다.
PIVOT Col IN()
절을 동적으로 업데이트하는 크로스 탭에서 SQL을 업데이트하려면 VBA에서 queydef를 만드는 것이 좋습니다. 물론, 필요에 따라 또는 매개 변수를 사용하여 시작일과 종료일을 전달하십시오.
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
'yyyy-mm'과 같이 정확하게 정렬 할 형식을 사용하여 날짜를 형식화하는 것이 하나의 방법입니다. – Gustav