2017-01-16 5 views
0

필드의 열에 대해 'mmm-yyyy'형식의 날짜가있는 교차 탭 쿼리가 있습니다.날짜 간 교차 탭 쿼리 - 별도의 테이블을 사용하여 정렬

아래의 디자인을 사용하여 쿼리를 작성했습니다.

Cross Tab Design View

오전 데 문제는 날짜 내림차순으로 7 월 16 일까지 12 월 17 일부터 올바르게 정렬되지 않습니다이다. 이것은 매달마다 달이 변하는 동적 쿼리가 될 것이므로 정렬 작업을 수행하기 위해 데이터 테이블을 추가로 사용하고 싶습니다 (Properties 창에 달 이름 목록을 입력하는 것과 반대).

Month Order Table

가 어떻게 내 쿼리가이 제발 할 얻을를 해결하는 것입니다? 당신의 도움이

+0

'yyyy-mm'과 같이 정확하게 정렬 할 형식을 사용하여 날짜를 형식화하는 것이 하나의 방법입니다. – Gustav

답변

1

에 대한

덕분에 불행하게도 상관없이 조인 된 테이블이 정렬 방식을, 크로스 탭은 따라서 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 
+0

고마워요 파르페 지금 당장해볼 게요. – JDT