0

私はそのように見えるクエリを持っています...

SELECT tbl1.ProjectID, tbl1.EntryDate AS StartDate, tbl2.EntryDate AS EndDate
FROM checklist_entries tbl1
INNER JOIN checklist_entries tbl2
ON tbl1.ProjectID = tbl2.ProjectID
WHERE tbl1.ChecklistDay = (SELECT ChecklistDayMin FROM milestone_def WHERE MilestoneDefID = [@milestoneID])
AND tbl2.ChecklistDay = (SELECT ChecklistDayMax FROM milestone_def WHERE MileStoneDefID = [@milestoneID])

ご覧のとおり、これは ProjectID (FK)、StartDate、および EndDate を返す自己結合テーブルであり、どちらもテーブルの EntryDate 列です。レコードを返すには、整数値 [@milestoneID] を渡す必要があります。これにより、サブクエリは WHERE 句に必要な最小値と最大値を返すことができます。

このクエリは 2 つの日付を返すため、このクエリを基にして、返された StartDate と EndDate から決定された TotalDays (TotalDays は営業日、Mon-Fri) の整数値で返される別の列を追加する方法を見つけたいと思います。 .

日数を返すクエリを見つけることができますが、基本的には、ACCESS でクエリを作成して、このクエリを呼び出し ([@MilestoneID] パラメーターを渡す)、返されたレコードごとに列を追加したいと考えています。 TotalDays カウントの最後。

4

1 に答える 1

2

ここでの私の回答と同様に、次を使用して平日の数を含める VBA 関数を作成できます。

SELECT 
    ... ,
    CountWeekdays(tbl1.EntryDate, tbl2.EntryDate) AS TotalWeekdays 
FROM ...

Access で新規作成しModule、次のコードを貼り付けます。

Public Function CountWeekdays(Date1 As Date, Date2 As Date) As Long
Dim StartDate As Date, EndDate As Date, _
        Weekdays As Long, i As Long
If Date1 > Date2 Then
    StartDate = Date2
    EndDate = Date1
Else
    StartDate = Date1
    EndDate = Date2
End If
Weekdays = 0
For i = 0 To DateDiff("d", StartDate, EndDate)
    Select Case Weekday(DateAdd("d", i, StartDate))
        Case 1, 7
            ' weekend - do nothing
        Case Else
            Weekdays = Weekdays + 1
    End Select
Next
CountWeekdays = Weekdays
End Function
于 2013-06-27T13:12:17.650 に答える