我有以下几列的出勤表:填补了枢轴结果SQL Server的虚拟列
StudentID, Date, Attendance
现在我运行一个查询来获取的考勤结果
DECLARE @paramList VARCHAR(MAX)
SET @paramList = STUFF((SELECT DISTINCT ',[' +
CONVERT(varchar(10), [Date], 20) + ']'
FROM AttendenceT
WHERE Date > '2014-01-01' AND Date < '2014-01-31'
FOR XML PATH('')) ,1,1,'')
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT StudentID, ' + @paramList
+ ' FROM(SELECT * FROM AttendenceT)src
PIVOT(SUM(Attendence) FOR Date IN (' + @paramList + ')) pvt'
EXEC sp_executesql @query
的结果
结果是,除了失踪当天OK在考勤表中,结果中没有列。我想要修改查询,以便即使日期不在考勤表中,它的列仍然可用。
请注意,我不是SQL的专家。我创建了这个查询使用谷歌和主要stackoverflow过去的问题的答案。
谢谢Michael Green。这已经解决了除NULL问题以外的问题。当我使用ISNULL(a.Attendance,0)时,出现以下错误消息 对象或列名称缺失或为空。对于SELECT INTO语句,请确认每列都有一个名称。对于其他语句,查找空的别名。别名定义为“”或[]是不允许的。将别名更改为有效的名称。 –
通过将值更新为 得到修正的错误ISNULL(a.Attendence,0)AS Attendence –