Это работает:
SELECT * INTO #attendance_records
FROM
(
SELECT 69 ID,'snaha sadhu' student_name, 16 roll_number, '36-1' intake, 1 attendence_status, CONVERT(VARCHAR(10), getdate(), 103) date
UNION ALL
SELECT 70 ID,'keya' student_name, 37 roll_number, '36-1' intake, 0 attendence_status, CONVERT(VARCHAR(10), getdate(), 103) date
union
SELECT 69 ID,'snaha sadhu' student_name, 16 roll_number, '36-1' intake, 1 attendence_status, CONVERT(VARCHAR(10), dateadd(day,1,getdate()), 103) date
UNION ALL
SELECT 70 ID,'keya' student_name, 37 roll_number, '36-1' intake, 1 attendence_status, CONVERT(VARCHAR(10), dateadd(day,1,getdate()), 103) date
)TAB
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
SELECT @ColumnName= ISNULL(@ColumnName + ',','') + '[' + [date] + ']'
FROM (select distinct [date] from #attendance_records) s
SET @DynamicPivotQuery =
N'select *, cast(CONVERT(DECIMAL(18,2),CONVERT(DECIMAL(18,2),' + replace(@ColumnName,',','+') + ')/CONVERT(DECIMAL(18,2),(select COUNT(distinct [date]) from #attendance_records)))*100 as varchar(10))+''%''
from
(SELECT student_name, roll_number, intake, ' + @ColumnName + '
FROM #attendance_records
PIVOT( sum(attendence_status)
FOR [date] IN (' + @ColumnName + '))
AS P) x'
EXEC sp_executesql @DynamicPivotQuery