有几种处理缺失行的方法,但是所有方法都是关于将另一组数据与您的当前结果结合在一起的。
这可以从您的结果中得出,可以是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 <= @EndDateORDER BY dt.tempDate, iv.EventStart
这将 日历模板 放在左侧,因此您可以轻松地进行许多查询,因为您知道日历的日期字段总是填充,始终是仅日期(无时间部分)值,有序,对于GROUP
BY很简单,等等。



