복붙노트

[SQL] Access 쿼리에서 시작 날짜와 종료 날짜를 사용하여

SQL

Access 쿼리에서 시작 날짜와 종료 날짜를 사용하여

내가 만들려고 오전이 Access 쿼리와 주시겠습니까 누군가의 도움이 날은?

나는 프로젝트의 목록과 시작 날짜와 종료 날짜와 테이블이 있습니다. 내가 필요한 것은 쿼리 것을 보여준다 예를 들어, 각 프로젝트에 대한 월별 프로젝트 일의 고장 :

PROJECT    Jan       Feb       Mar
AAAAA       7        28        2

... 등, 숫자는 시작 날짜와 종료 날짜를 기준으로 계산 된 프로젝트 일이있는 곳. 예를 들어, 위의 쿼리에서, 프로젝트 AAAAA는 24/01/2012의 시작 날짜를 가지고 2012년 2월 3일 일을 끝낼 것

누군가가 이것을 달성하는 방법에 나를 인도 할 수하세요?

많은 감사합니다!

해결법

  1. ==============================

    1.나는 대처할이 더 쉽게 만드는 달력 테이블을 만들었습니다. 나는 아래 (CreateTable_calendar 및 LoadCalendar)를 사용하는 두 가지 절차에 대한 코드가 포함되어 있습니다. 난 당신이 매달 만 조직의 작업 일에 일의 수를 제한 할 경우 일정 테이블에 "work_day"필드를 추가했다. 그렇다면, 당신은 WHERE 절 따라 쿼리의를 조정해야합니다. 내 선택은 당신 일치하지 않는 경우 그리고 각 달력 날짜의 work_day 값을 다시 설정합니다.

    나는 대처할이 더 쉽게 만드는 달력 테이블을 만들었습니다. 나는 아래 (CreateTable_calendar 및 LoadCalendar)를 사용하는 두 가지 절차에 대한 코드가 포함되어 있습니다. 난 당신이 매달 만 조직의 작업 일에 일의 수를 제한 할 경우 일정 테이블에 "work_day"필드를 추가했다. 그렇다면, 당신은 WHERE 절 따라 쿼리의를 조정해야합니다. 내 선택은 당신 일치하지 않는 경우 그리고 각 달력 날짜의 work_day 값을 다시 설정합니다.

    당신이 밖으로 정렬하기위한 어쨌든, 나는 그 세부 사항을 떠날거야. 일 대 비 작업 일에 대한 조정을하지 않고,이 쿼리 반환 결과는 내가 원하는 생각 설정합니다.

    TRANSFORM Count(sub.the_date) AS CountOfProjectDays
    SELECT sub.Project_name
    FROM
        (
            SELECT
                p.Project_name,
                MonthName(Month(c.the_date),-1) AS month_name,
                c.the_date
            FROM Projects AS p, tblCalendar AS c
            WHERE
                c.the_date >= [p].[start_date]
                And c.the_date <= [p].[end_date]
            ORDER BY p.Project_name
        ) AS sub
    GROUP BY sub.Project_name
    PIVOT sub.month_name
        In ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
           "Aug", "Sep", "Oct", "Nov", "Dec");
    

    노트:

    달력 테이블을 확인 :

    Public Sub CreateTable_calendar()
        Const cstrTable As String = "tblCalendar"
        Dim cn As Object
        Dim strSql As String
        Set cn = CurrentProject.Connection
    
        On Error Resume Next
        cn.Execute "DROP TABLE " & cstrTable & ";"
        If Err.Number <> 0 Then
            Debug.Print Err.Description
        End If
        On Error GoTo 0
    
        strSql = "CREATE TABLE " & cstrTable & " (" & vbCrLf & _
            "the_date DATETIME CONSTRAINT pkey PRIMARY KEY," & vbCrLf & _
            "work_day YESNO," & vbCrLf & _
            "CONSTRAINT midnite_only CHECK " & _
            "(the_date = DateValue(the_date))" & vbCrLf & _
            ");"
        Debug.Print strSql
        cn.Execute strSql
    
        Set cn = Nothing
    End Sub
    

    달력 테이블을로드합니다. 그것을 해 인수를 포기하지 않고, 현재 연도의 모든 날짜를로드합니다. 그렇지 않으면 당신은 인수로 제공 한 연도의 날짜를로드합니다.

    Public Sub LoadCalendar(Optional ByVal pYear As Integer)
        Const cstrTable As String = "tblCalendar"
        Dim db As DAO.Database
        Dim dte As Date
        Dim intYear As Integer
        Dim rs As DAO.Recordset
        Dim strMsg As String
    
    On Error GoTo ErrorHandler
    
        intYear = IIf(pYear = 0, Year(Date), pYear)
        dte = DateSerial(intYear, 1, 1)
    
        Set db = CurrentDb
        Set rs = db.OpenRecordset(cstrTable, dbOpenTable, dbAppendOnly)
    
        Do While Year(dte) = intYear
            rs.AddNew
            rs!the_date = dte
            rs!work_day = Not (Weekday(dte) = vbSunday Or _
                Weekday(dte) = vbSaturday)
            rs.Update
            dte = dte + 1
        Loop
        rs.Close
    
    ExitHere:
        On Error GoTo 0
        Set rs = Nothing
        Set db = Nothing
        Exit Sub
    
    ErrorHandler:
        strMsg = "Error " & Err.Number & " (" & Err.Description _
            & ") in procedure LoadCalendar"
        MsgBox strMsg
        GoTo ExitHere
    End Sub
    

    편집 : 일정이 예약 된 단어입니다. Access에서 문제 이름과 예약어를 참조하십시오. 나는 미스터 브라운의 데이터베이스 문제 검사기 유틸리티를 사용하여 내 데이터베이스를 검토 할 때까지 통지하지 않았다. 그래서 나는이 답변에 tblCalendar에 이름 일정을 변경했습니다. 그리고 난 강력하게 그 유틸리티를 권장합니다. 예약어의 문제를 식별하는 것뿐만 아니라, 다른 많은 잠재적 인 문제 문제에 대해 알려 할 수 있습니다.

  2. ==============================

    2.당신이 크로스 탭 쿼리를 살펴 보시기 바랍니다 : http://www.databasedev.co.uk/crosstab_queries.html

    당신이 크로스 탭 쿼리를 살펴 보시기 바랍니다 : http://www.databasedev.co.uk/crosstab_queries.html

    한달 카운트 -이 프로그램은 정확하게 결과의 종류는 당신이 찾고 있습니다. 당신은 시작 및 종료 날짜는 다음 몇 일 한 달에 각 프로젝트의 사용을 계산할 수 지정 한달에 테이블을함으로써 중간 단계 등으로 한 달에 일을 계산해야 할 수도 있습니다.

    귀하의 단계는 같은과 같습니다 : 날짜의 1 표는 한 달에 범위 한달에 프로젝트 당 2 시작 및 종료 계산 날짜

    Select p.projectName, md.monthNumber,
    Case when p.startDate < md.startDate then md.startDate
    When p.startDate < md.endDate then p.startDate else p.endDate
    , case when p.endDate > md.endDate then md.endDate
    When p.endDate > md.startDate then p.endDate else md.startdate end
    From @projects p
    Inner join @monthDates md on p.startDate <= md.endDate and p.endDate > md.startDate
    

    Access에서 나는 IIF가 CASE에 동등하다고 생각?

    당신은 (31에서 프로젝트 완료 그것이 1월으로 계산하거나 2월 1일 등을 계속 필요하지 않은 경우) 만 얻을 수있는 그 정도로 월의 첫 번째 / 마지막 날을 계산하는 당신이 원하는 방법에 따라 위의 조정해야 네가 시작 했어

    마지막으로는 프로젝트 시작 한달 종료 날짜 사이의 날짜 뺄셈을하고, 필요한 형식으로이를 변환하는 액세스 크로스 탭을 사용합니다.

  3. from https://stackoverflow.com/questions/9296078/using-start-date-and-end-date-in-access-query by cc-by-sa and MIT license