Skip to content
Advertisement

Displaying student absent dates

Here is the table I want to display:

   tblAttendance table
    CustomerId
    Id
    Attendence 
    Date
    and
    tblStudent 
    CustomerId
    Name

Now I want to search by from to date and want absent date. How can I achieve this?

I tried below code:

ALTER PROCEDURE spExceptDate

AS
declare @StartDate DATE, @EndDate DATE
set @StartDate = '2020-02-15';
set @EndDate = '2020-02-25';
BEGIN


 SELECT CustomerId,FirstName+' '+LastName,Date,Attendance 
FROM
[dbo].[tblAttendance] att
LEFT JOIN
[dbo].[tblStudent] st
ON att.CustomerId = st.Code

EXCEPT

 SELECT CustomerId,FirstName+' '+LastName,Date,Attendance 
FROM
[dbo].[tblAttendance] att
LEFT JOIN
[dbo].[tblStudent] st
ON att.CustomerId = st.Code
where att.Date>='2020-02-15' and att.Date<='2020-02-25'

END
GO

i want date for which student absend

Advertisement

Answer

Basically what you need is list of possible dates between From and To

DECLARE @StartDate DATE = '2020-02-15',
        @EndDate DATE = '2020-02-25' ;

--Create a CTE to get all dates between from and to (you should filter holidays and weekends)
WITH SchoolCalendar (WorkingDay)
AS (SELECT @StartDate
    UNION ALL
    SELECT DATEADD(DAY, 1, WorkingDay)
    FROM SchoolCalendar 
    WHERE WorkingDay< @EndDate
   )

--Use the CTE to determine the Absense records
SELECT st.Code CustomerId, st.FirstName+' '+st.LastName Name,st.WorkingDay Date, COALESCE(Attendance,'A')  Attendance
FROM (SELECT * from SchoolCalendar, tblStudent) st
    LEFT JOIN [dbo].[tblAttendance] att ON att.Date = st.WorkingDay AND att.CustomerId = st.Code
WHERE st.WorkingDay>=@StartDate and st.WorkingDay<=@EndDate
ORDER BY st.Code, st.WorkingDay 
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement