あなたの問題は、私が解決しなければならなかった同様の問題を思い出させます。動的 SQL を使用すると、問題は次のように解決されます
-- create list of all dates
DECLARE @dates varchar(1000) = ''
SELECT @dates = @dates + ',[' + CAST(t.[date] as varchar)+']'
FROM ( SELECT DISTINCT [date] FROM Attendance) t
-- remove first comma
IF LEN(@dates)>1 SET @dates = RIGHT(@dates,LEN(@dates)-1)
-- create query with UNPIVOT and PIVOT
exec('SELECT
StudentName,'+
@dates+
'FROM(
SELECT
[date],
[stat],
StudentName
FROM
(SELECT
[date],
[status],
StudentName
FROM
Attendance
) AS t
UNPIVOT
( stat FOR s in ([status])) unpvt
) dummy
PIVOT
(
MAX(stat) FOR [date] in ('+@dates+')
) pvt
ORDER BY StudentName;');
それはあなたの要求のためのSqlFiddleです