Je génère les présences mensuelles des étudiants.
CREATE PROCEDURE GET_ATTENDANCE_REPORT_FOR_FACULTY
@startdate DATE,
@enddate DATE,
@collegecode nvarchar(10),
@coursecode nvarchar(10),
@subjectcode nvarchar(10)
AS BEGIN
DECLARE @query as varchar(MAX);
with cte (startdate) as
(
select @startdate startdate
union all
select dateadd(DD, 1, startdate)
from cte
where startdate < @enddate
)
select @query = coalesce(@query, '') +
N',coalesce(MAX(CASE when A.[Date] = ''' +
cast(cte.startdate as nvarchar(20)) +
N''' THEN Convert(varchar(10),A.[Attendance]) end), ''-'') ' +
quotename(convert(char(2), cte.startdate,104))
from cte
where datename(weekday, cte.startdate) <> 'Sunday';
set @query = 'Select S.RollNo AS [Roll No],Concat(FirstName,'' '',LastName) Name' + @query + ',Concat(sum(Attendance),''/'',count(Attendance)) Total
from Attendance A, Student S, UserDetails U
where A.EnrollmentNo=S.EnrollmentNo and S.EnrollmentNo=U.userID and S.CollegeCode=''' + @collegecode + ''' and A.CourseCode=''' + @coursecode + ''' and A.SubjectCode =''' + @subjectcode +'''
and A.Date between ''' + Convert(nvarchar,@startdate) + ''' and ''' + Convert(nvarchar,@enddate) + '''
Group By S.RollNo,U.FirstName,U.LastName';
Execute (@query)
END
Cela fonctionne bien pour générer les enregistrements de présence par date, mais il peut y avoir plusieurs enregistrements pour la même date.
Dans ce cas, la somme des présences doit être affichée pour cette date particulière.
Alors, que dois-je changer dans @query pour obtenir le résultat souhaité ?
Données de l'échantillon :
CREATE TABLE #Attendance (EnrollmentNo varchar(50),
SubjectCode varchar(10),
[Date] datetime,
Attendance numeric(1,0),
CourseCode varchar(10),
FacultyId varchar(50));
INSERT INTO #Attendance
VALUES ('DDU-320/12','CSHT101','20180201',0,'BSCCS','Fac101'),
('DDU-320/12','CSHT101','20180201',1,'BSCCS','Fac101'),
('DDU-320/12','CSHT101','20180201',1,'BSCCS','Fac101'),
('DDU-320/12','CSHT101','20180202',1,'BSCCS','Fac101'),
('DDU-320/12','CSHT101','20180202',2,'BSCCS','Fac101'),
('DDU-320/12','CSHT101','20180202',0,'BSCCS','Fac101');
CREATE TABLE #Student (EnrollmentNo varchar(50),
RollNo numeric(3,0),
CollegeCode varchar(10),
CourseCode varchar(10),
[year] int);
INSERT INTO #Student
VALUES ('DDU-320/12',38,'DDUC','BSCCS',2012);
CREATE TABLE #UserDetail (userID varchar(50),
Firstname varchar(50),
LastName varchar(50),
Gender varchar (6),
[Address] varchar(500),
Phone varchar(10));
INSERT INTO #UserDetail
VALUES ('DDU-320/12','Suyash','Gupta','Male','Lucknow',9817271);
GO
Sortie souhaitée :
+---------+--------------+----+----+-------+
| Roll No | Name | 01 | 02 | Total |
+---------+--------------+----+----+-------+
| 38 | Suyash Gupta | 2 | 3 | 5 |
+---------+--------------+----+----+-------+