Try this, DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)
select @cols = stuff((select distinct ',' + quotename(subjectName)
from Subject WHERE courseID = 'C1001'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'select studentID,' + @cols + '
from
(
select S.studentID, ss.subjectID, M.Marks
from Student S
join Subject ss on S.courseID = ss.courseID
join Mark M on M.subjectID = ss.SubjectID AND M.studentID = S.StudentID
where S.batchID = 1
) x
pivot
(
max(Marks)
for subjectName in (' + @cols + ')
) p '
execute(@query)