欠落している行を処理する方法はいくつかありますが、いずれも別のデータ セットを取得して現在の結果と組み合わせる方法です。
これは、CTE または他のプロセス (あなたの例など) によって作成された結果、または (私の好み) 永続的な テンプレート を使用して作成された結果から派生する可能性があります。
あなたの場合のテンプレートは、@datesTBL のような日付のテーブルにすぎません。違いは、たとえば 100 年分の日付で事前に作成されていることです。
あなたのクエリはあなたの例に似ているかもしれませんが、私は次のことを試してみます...
SELECT
dt.tempDate ,
InstructorID, EventStart,
EventEnd, cancelled,
cancelledInstructor,
EventType, DevName,
Room, SimLocation,
ClassLocation, Event,
Duration, TrainingDesc,
Crew, Notes,
LastAmended, InstLastAmended,
ChangeAcknowledged, Type,
OtherType, OtherTypeDesc,
CourseType
FROM
@datesTBL dt
LEFT OUTER JOIN
OpsInstructorEventsView iv
ON iv.EventStart >= dt.tempDate
AND iv.EventStart < dt.tempDate + 1
AND iv.InstructorID = @InstructorID
WHERE
dt.tempDate >= @StartDate
AND dt.tempDate <= @EndDate
ORDER BY
dt.tempDate,
iv.EventStart
これにより、カレンダー テンプレートが配置されます 左側にあり、カレンダーの日付フィールドが常に入力されていること、常に日付のみ (時間部分なし) の値であること、順序が正しいこと、GROUP BY が簡単であることなどを知っているため、多くのクエリが簡単になります。