Sql 在pivot查询中获取错误的输出
考勤表样本数据-Sql 在pivot查询中获取错误的输出,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,考勤表样本数据- +--------------+-------------+-----------+------------+------------+ | EnrollmentNo | SubjectCode | Date | Attendance | CourseCode | +--------------+-------------+-----------+------------+------------+ | DDU-140/12 | CSHT101 | 1/9
+--------------+-------------+-----------+------------+------------+
| EnrollmentNo | SubjectCode | Date | Attendance | CourseCode |
+--------------+-------------+-----------+------------+------------+
| DDU-140/12 | CSHT101 | 1/9/2018 | 1 | BSCCS |
| DDU-140/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-140/12 | CSHT101 | 1/11/2018 | 2 | BSCCS |
| DDU-286/12 | CSHT101 | 1/9/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT101 | 1/11/2018 | 0 | BSCCS |
| DDU-286/12 | CSHT102 | 1/11/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT102 | 1/14/2018 | 2 | BSCCS |
| DDU-320/12 | CSHT101 | 1/9/2018 | 2 | BSCCS |
| DDU-320/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-320/12 | CSHT101 | 1/11/2018 | 0 | BSCCS |
| DDU-320/12 | CSHT102 | 1/11/2018 | 1 | BSCCS |
| DDU-320/12 | CSHT102 | 1/14/2018 | 0 | BSCCS |
+--------------+-------------+-----------+------------+------------+
+--------------+--------+-------------+------------+------+
| EnrollmentNo | RollNO | CollegeCode | CourseCode | Year |
+--------------+--------+-------------+------------+------+
| DDU-140/12 | 22 | DDUC | BSCCS | 2012 |
| DDU-286/12 | 15 | DDUC | BSCCS | 2012 |
| DDU-320/12 | 38 | DDUC | BSCCS | 2012 |
+--------------+--------+-------------+------------+------+
+--------------+-------------+
| EnrollmentNo | SubjectCode |
+--------------+-------------+
| DDU-140/12 | CSHT101 |
| DDU-286/12 | CSHT101 |
| DDU-286/12 | CSHT102 |
| DDU-320/12 | CSHT101 |
| DDU-320/12 | CSHT102 |
+--------------+-------------+
+-------------+---------------------------+
| SubjectCode | SubjectName |
+-------------+---------------------------+
| CSHP101 | Software Lab based on 101 |
| CSHT101 | Programming Fundamentals |
| CSHT102 | Discrete Structures |
+-------------+---------------------------+
学生表格样本数据-
+--------------+-------------+-----------+------------+------------+
| EnrollmentNo | SubjectCode | Date | Attendance | CourseCode |
+--------------+-------------+-----------+------------+------------+
| DDU-140/12 | CSHT101 | 1/9/2018 | 1 | BSCCS |
| DDU-140/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-140/12 | CSHT101 | 1/11/2018 | 2 | BSCCS |
| DDU-286/12 | CSHT101 | 1/9/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT101 | 1/11/2018 | 0 | BSCCS |
| DDU-286/12 | CSHT102 | 1/11/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT102 | 1/14/2018 | 2 | BSCCS |
| DDU-320/12 | CSHT101 | 1/9/2018 | 2 | BSCCS |
| DDU-320/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-320/12 | CSHT101 | 1/11/2018 | 0 | BSCCS |
| DDU-320/12 | CSHT102 | 1/11/2018 | 1 | BSCCS |
| DDU-320/12 | CSHT102 | 1/14/2018 | 0 | BSCCS |
+--------------+-------------+-----------+------------+------------+
+--------------+--------+-------------+------------+------+
| EnrollmentNo | RollNO | CollegeCode | CourseCode | Year |
+--------------+--------+-------------+------------+------+
| DDU-140/12 | 22 | DDUC | BSCCS | 2012 |
| DDU-286/12 | 15 | DDUC | BSCCS | 2012 |
| DDU-320/12 | 38 | DDUC | BSCCS | 2012 |
+--------------+--------+-------------+------------+------+
+--------------+-------------+
| EnrollmentNo | SubjectCode |
+--------------+-------------+
| DDU-140/12 | CSHT101 |
| DDU-286/12 | CSHT101 |
| DDU-286/12 | CSHT102 |
| DDU-320/12 | CSHT101 |
| DDU-320/12 | CSHT102 |
+--------------+-------------+
+-------------+---------------------------+
| SubjectCode | SubjectName |
+-------------+---------------------------+
| CSHP101 | Software Lab based on 101 |
| CSHT101 | Programming Fundamentals |
| CSHT102 | Discrete Structures |
+-------------+---------------------------+
StudentSubject表样本数据-
+--------------+-------------+-----------+------------+------------+
| EnrollmentNo | SubjectCode | Date | Attendance | CourseCode |
+--------------+-------------+-----------+------------+------------+
| DDU-140/12 | CSHT101 | 1/9/2018 | 1 | BSCCS |
| DDU-140/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-140/12 | CSHT101 | 1/11/2018 | 2 | BSCCS |
| DDU-286/12 | CSHT101 | 1/9/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT101 | 1/11/2018 | 0 | BSCCS |
| DDU-286/12 | CSHT102 | 1/11/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT102 | 1/14/2018 | 2 | BSCCS |
| DDU-320/12 | CSHT101 | 1/9/2018 | 2 | BSCCS |
| DDU-320/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-320/12 | CSHT101 | 1/11/2018 | 0 | BSCCS |
| DDU-320/12 | CSHT102 | 1/11/2018 | 1 | BSCCS |
| DDU-320/12 | CSHT102 | 1/14/2018 | 0 | BSCCS |
+--------------+-------------+-----------+------------+------------+
+--------------+--------+-------------+------------+------+
| EnrollmentNo | RollNO | CollegeCode | CourseCode | Year |
+--------------+--------+-------------+------------+------+
| DDU-140/12 | 22 | DDUC | BSCCS | 2012 |
| DDU-286/12 | 15 | DDUC | BSCCS | 2012 |
| DDU-320/12 | 38 | DDUC | BSCCS | 2012 |
+--------------+--------+-------------+------------+------+
+--------------+-------------+
| EnrollmentNo | SubjectCode |
+--------------+-------------+
| DDU-140/12 | CSHT101 |
| DDU-286/12 | CSHT101 |
| DDU-286/12 | CSHT102 |
| DDU-320/12 | CSHT101 |
| DDU-320/12 | CSHT102 |
+--------------+-------------+
+-------------+---------------------------+
| SubjectCode | SubjectName |
+-------------+---------------------------+
| CSHP101 | Software Lab based on 101 |
| CSHT101 | Programming Fundamentals |
| CSHT102 | Discrete Structures |
+-------------+---------------------------+
主题表样本数据-
+--------------+-------------+-----------+------------+------------+
| EnrollmentNo | SubjectCode | Date | Attendance | CourseCode |
+--------------+-------------+-----------+------------+------------+
| DDU-140/12 | CSHT101 | 1/9/2018 | 1 | BSCCS |
| DDU-140/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-140/12 | CSHT101 | 1/11/2018 | 2 | BSCCS |
| DDU-286/12 | CSHT101 | 1/9/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT101 | 1/11/2018 | 0 | BSCCS |
| DDU-286/12 | CSHT102 | 1/11/2018 | 1 | BSCCS |
| DDU-286/12 | CSHT102 | 1/14/2018 | 2 | BSCCS |
| DDU-320/12 | CSHT101 | 1/9/2018 | 2 | BSCCS |
| DDU-320/12 | CSHT101 | 1/10/2018 | 1 | BSCCS |
| DDU-320/12 | CSHT101 | 1/11/2018 | 0 | BSCCS |
| DDU-320/12 | CSHT102 | 1/11/2018 | 1 | BSCCS |
| DDU-320/12 | CSHT102 | 1/14/2018 | 0 | BSCCS |
+--------------+-------------+-----------+------------+------------+
+--------------+--------+-------------+------------+------+
| EnrollmentNo | RollNO | CollegeCode | CourseCode | Year |
+--------------+--------+-------------+------------+------+
| DDU-140/12 | 22 | DDUC | BSCCS | 2012 |
| DDU-286/12 | 15 | DDUC | BSCCS | 2012 |
| DDU-320/12 | 38 | DDUC | BSCCS | 2012 |
+--------------+--------+-------------+------------+------+
+--------------+-------------+
| EnrollmentNo | SubjectCode |
+--------------+-------------+
| DDU-140/12 | CSHT101 |
| DDU-286/12 | CSHT101 |
| DDU-286/12 | CSHT102 |
| DDU-320/12 | CSHT101 |
| DDU-320/12 | CSHT102 |
+--------------+-------------+
+-------------+---------------------------+
| SubjectCode | SubjectName |
+-------------+---------------------------+
| CSHP101 | Software Lab based on 101 |
| CSHT101 | Programming Fundamentals |
| CSHT102 | Discrete Structures |
+-------------+---------------------------+
输出-
使用参数显示错误的输出-
@enrollno = 'DDU-320/12',
@startdate = '1/9/2018',
@enddate = '1/11/2018'
当2,1,0和NA时,应显示NA,1,而不是2,1,1和2,1,1
无法指出我犯的错误。谁能看一下吗
CREATE PROCEDURE GET_ATTENDANCE_REPORT_FOR_STUDENT
@enrollno varchar(10),
@startdate DATE,
@enddate DATE
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), ''NA'') ' +
quotename(convert(char(6), cte.startdate,106))
from cte
where datename(weekday, cte.startdate) <> 'Sunday';
set @query = 'Select Concat(S.SubjectCode,'' '',S.SubjectName) Subject' + @query + '
from Attendance A, Student St, StudentSubject SS, Subject S
where A.EnrollmentNo=St.EnrollmentNo and St.EnrollmentNo=SS.EnrollmentNo and SS.SubjectCode=S.SubjectCode and St.EnrollmentNo =''' + @enrollno + '''
Group By S.SubjectName,S.SubjectCode';
Execute (@query)
END
缺少联接条件,考勤表也需要使用SubjectCode联接。由于缺少条件,它正在从两个主题代码中选择日期 在老式的逗号分隔联接上也开始使用内部联接语法。在ON子句中保留联接条件,在Where子句中保留筛选器
话虽如此,根据预期结果,您首先不需要这两个表以表格格式将示例数据添加为文本。。不要使用图像显示示例数据没有人可以使用它来测试Attention.DateAttention.Date-Date和Attention.Attention-numericQuery的数据类型在我看来很好。。除了您显示的记录外,我相信您还有更多的注册记录编号:DDU-320/12。运行此查询并查看Selectfromtainment,其中EnrollmentNo='DDU-320/12'Nope。给你看满桌的。“DDU-320/12”的记录不超过4条。