Try this:
SELECT Class, A_BOYS, A_GIRLS, B_BOYS, B_GIRLS, C_BOYS, C_GIRLS
FROM (
SELECT Class, CONVERT(NVARCHAR(30), subject + '_Boys') Category, no_of_boys AS [Population]
FROM Tbl_Class
UNION ALL
SELECT Class, CONVERT(NVARCHAR(30), subject + '_Girls'), no_of_girls AS [Population]
FROM Tbl_Class
) AS DT
PIVOT (SUM([Population]) FOR Category IN (A_BOYS, A_GIRLS, B_BOYS, B_GIRLS, C_BOYS, C_GIRLS)) AS PT
If you want to do it in dynamic way, plese follow this link:
https://www.simple-talk.com/blogs/2007/09/14/pivots-with-dynamic-columns-in-sql-server-2005/[
^].