질문에 대한 간단한 대답은 액세스 쿼리 빌더에서 동적 필드 이름을 가질 수 없다는 것입니다. 이상적으로는 날짜 필드가 하나가되도록 데이터를 수정해야합니다. 그렇게하면 아래 체조가 필요없는 쿼리 기준에서 해당 필드의 기간을 지정할 수 있습니다.
그렇다면 긴 대답은 VBA 코드를 사용하여 쿼리를 작성해야한다는 것입니다. 아래 코드는 필요한 필드를 포함 할 데이터베이스 (새롭게 "YourQuery"라고 함)에 새 쿼리를 작성해야합니다.
테이블이 무엇인지 불분명하기 때문에이 예제에서는 "테이블"이됩니다. 이 코드를 사용하면 테이블이 무엇이든 변경해야합니다.
데이터베이스의 VBA 모듈에이 코드를 설치 한 다음이 함수를 호출하여 새 쿼리를 생성해야합니다. 예를 들어, 실행할 프로 시저로 "DynamicQuery()"를 사용하는 "RunCode"조치를 사용하여 매크로를 작성할 수 있습니다. 이 달에 대한 쿼리가 이미 존재하면 함수 호출이 실패하므로 어떤 이유로 든 다시 실행해야 할 경우 수동으로 삭제하십시오 (이 작업을 수행하는 데 추가 코드를 추가 할 수도 있음).
다시 말해서 뭔가를 할 수 있다고해서 꼭해야한다는 것은 아닙니다. 이와 같은 대안에 의지 할 필요가 없도록 테이블을 재 설계해야합니다.
Public Function DynamicQuery()
Dim strSQL As String
dim datFieldDate As Date
Dim strYearMonth As String
Dim strThisMonth As String
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim i As Integer
Set dbs = CurrentDb
strThisMonth = Year(Date) & "_" & Month(Date)
strSQL = "SELECT table." & strThisMonth
For i = 1 to 12
datFieldDate = DateAdd("m",i,Date)
strYearMonth = Year(datFieldDate) & "_" & Month(DatFieldDate)
strSQL = strSQL & ", table." & strYearMonth
Next i
strSQL = strSQL & " FROM table;"
Set qdf = dbs.CreateQueryDef("YourQuery_" & strThisMonth, strSQL)
Set qdf = Nothing
Set dbs = Nothing
End Function
아마도 시도 할 수 있습니까? –
2013_9를 시뮬레이트하려고 시도하기 위해 SELECT (Year (Now)) & "_ 9"를 사용하려고했지만 반환 된 결과는 다음과 같습니다. 필드 이름은 expr1000이고 해당 필드의 값은 2013_9의 열입니다. 해당 열의 모든 셀 – user3126475
데이터가 SQL 쿼리를 처리하기위한 잘못된 구조에 있습니다. 그것을 정규화해야합니다. – Yawar