I'll bite. Seems like a jump-start is needed.
Below are two options: The first is Dynamic which will allow future response codes. The second will illustrate the actual PIVOT syntax
The Dynamic Option
Declare @SQL varchar(max)
Select @SQL = Stuff((Select Distinct ',' + QuoteName([Response Code]) From YourTable Order by 1 For XML Path('')),1,1,'')
Select @SQL = 'Select [Lvl],[Employee],' + @SQL + '
From (
Select [Employee],[Response Code],Cnt=1,Lvl=0 from YourTable
Union All
Select ''Total'',[Response Code],count(*),1 From YourTable Group By [Response Code]
) A
Pivot (sum(Cnt) For [Response Code] in (' + @SQL + ') ) p'
Exec(@SQL);
The Non-Dynamic Option
Select [Lvl],[Employee],[ptb],[ulm],[vml],[wrn]
From (
Select [Employee],[Response Code],Cnt=1,Lvl=0 from YourTable
Union All
Select 'Total',[Response Code],count(*),1 From YourTable Group By [Response Code]
) A
Pivot (sum(Cnt) For [Response Code] in ([ptb],[ulm],[vml],[wrn]) ) p
Both would return
Employee ptb ulm vml wrn
Emp A NULL NULL 2 1
Emp B NULL 2 NULL 1
Emp C 1 NULL 1 NULL
Total 1 2 3 2
EDIT - To Remove NULLs
Notice the additional Union All
Declare @SQL varchar(max)
Select @SQL = Stuff((Select Distinct ',' + QuoteName([Response Code]) From YourTable Order by 1 For XML Path('')),1,1,'')
Select @SQL = 'Select [Lvl],[Employee],' + @SQL + '
From (
Select [Employee],[Response Code],Cnt=1,Lvl=0 from YourTable
Union All
Select [Employee],[Response Code],Cnt=0,Lvl=0 from (Select Distinct [Employee] from YourTable) A Join (Select Distinct [Response Code] from YourTable) B on 1=1
Union All
Select ''Total'',[Response Code],count(*),1 From YourTable Group By [Response Code]
) A
Pivot (sum(Cnt) For [Response Code] in (' + @SQL + ') ) p'
Exec(@SQL);