我有以下幾列的出勤表:填補了樞軸結果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 –