Existuje několik způsobů, jak se vypořádat s chybějícími řádky, ale všechny jsou o tom, že máte další sadu dat, která se spojí s vašimi aktuálními výsledky.
To by mohlo být odvozeno z vašich výsledků, vytvořených CTE nebo jiným procesem (jako je váš příklad), nebo (má preference) pomocí trvalé šablony připojit se proti.
Šablona ve vašem případě může být pouze tabulka dat, například vaše @datesTBL. Rozdíl je v tom, že je vytvořen předem, například s daty v hodnotě 100 let.
Váš dotaz pak může být podobný vašemu příkladu, ale zkusil bych následující...
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
Tím se vloží šablona kalendáře VLEVO, a tak usnadňuje mnoho dotazů, protože víte, že pole data kalendáře je vždy vyplněno, je vždy pouze datem (bez časové části), je v pořádku, lze jej jednoduše GROUP BY atd.