在SQL Server 2014中我有一个包含学生缺席信息的表格,我从该表格中选择CTE以显示 StudentName , CName 作为列标题和缺勤时间每个课程的每个学生。 这是我的CTE代码:
DECLARE @SummaryTable TABLE
(
SName nvarchar(50),-- Student Name
CName nvarchar(50) -- Course Name
)
INSERT INTO @SummaryTable(SName, CName)
SELECT Student_tbl.SName,Sum_Abs from Absence_Summary_tbl
inner join Student_tbl on Student_tbl.S_ID = Absence_Summary_tbl.S_ID
inner join Stages_tbl on Stages_tbl.Stage_ID = Student_tbl.Stage_ID
where Stages_tbl.Stage_ID = 1;
WITH CTE AS (
SELECT SName, CName,
ROW_NUMBER() OVER(PARTITION BY SName ORDER BY CName) AS rn FROM @SummaryTable )
SELECT SName,
MAX(CASE WHEN rn=1 THEN CName ELSE 0 END) AS CName1,
MAX(CASE WHEN rn=2 THEN CName ELSE 0 END) AS CName2,
MAX(CASE WHEN rn=3 THEN CName ELSE 0 END) AS CName3
FROM CTE
GROUP BY SName;
CTE的结果如下图所示:
http://i68.tinypic.com/1zlsz9v.png[/IMG]
在结果中它显示课程名称为CName1,CName2,CName3作为列标题,有没有办法显示真实的课程名称,除了别名作为课程名称的列标题。在我的真实表格中 Absence_Summary_tbl '我在名为 CName 的专栏中有一个课程名称。
答案 0 :(得分:0)
在@SummaryTable中,您插入sum_Abs而不是CourseName, @SummaryTable应该有3列SName,CName,Sum_Abs(用于存储每个学生每门课程缺席的数量)
没有必要通过CTE实现这一目标 改为使用Pivot: -
$_SERVER['REQUEST_URI']