अनुपलब्ध पंक्तियों से निपटने के कई तरीके हैं, लेकिन सभी आपके वर्तमान परिणामों के साथ संयोजन करने के लिए डेटा का एक और सेट रखने के बारे में हैं।
यह आपके परिणामों से प्राप्त किया जा सकता है, जो एक सीटीई या अन्य प्रक्रिया (जैसे आपका उदाहरण), या (मेरी वरीयता) द्वारा स्थायी टेम्पलेट का उपयोग करके बनाया गया है। के खिलाफ शामिल होने के लिए।
आपके मामले में टेम्प्लेट सिर्फ तारीखों की एक तालिका हो सकती है, जैसे कि आपका @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
यह कैलेंडर टेम्पलेट . डालता है बाईं ओर, और इसलिए कई प्रश्नों को आसान बनाता है क्योंकि आप जानते हैं कि कैलेंडर का दिनांक फ़ील्ड हमेशा पॉप्युलेट होता है, हमेशा केवल एक दिनांक (कोई समय भाग नहीं) मान होता है, क्रम में होता है, ग्रुप बाय, आदि के लिए आसान होता है।