You can create dynamic pivot, passing a table. As per following step.
1. Create a table.
Create Table Employee
(
EmpId int Identity(1,1)Primary Key,
EmpName varchar(500),
Salary decimal(18,2),
Createdon datetime default getdate()
)
2. Insert records.
a) Current month to current date
insert into Employee values('Arun',10000,GETDATE())
insert into Employee values('Barun',20000, GETDATE())
insert into Employee values('Tarun',30000, GETDATE())
insert into Employee values('Ajay',40000, GETDATE())
insert into Employee values('Vijay',50000, GETDATE())
insert into Employee values('Anil',60000, GETDATE())
b) before 1 month to current date
insert into Employee values('Arun',15000,DATEADD(mm,-1, GETDATE()))
insert into Employee values('Barun',25000, DATEADD(mm,-1, GETDATE()))
insert into Employee values('Tarun',35000, DATEADD(mm,-1, GETDATE()))
insert into Employee values('Ajay',45000, DATEADD(mm,-1, GETDATE()))
insert into Employee values('Vijay',55000, DATEADD(mm,-1, GETDATE()))
insert into Employee values('Anil',65000, DATEADD(mm,-1, GETDATE()))
c) before 2 month to current date
insert into Employee values('Arun',20000,DATEADD(mm,-2, GETDATE()))
insert into Employee values('Barun',30000, DATEADD(mm,-2, GETDATE()))
insert into Employee values('Tarun',40000, DATEADD(mm,-2, GETDATE()))
insert into Employee values('Ajay',50000, DATEADD(mm,-2, GETDATE()))
insert into Employee values('Vijay',60000, DATEADD(mm,-2, GETDATE()))
insert into Employee values('Anil',70000, DATEADD(mm,-2, GETDATE()))
d) before 3 month to current date
insert into Employee values('Arun',20000,DATEADD(mm,-3, GETDATE()))
insert into Employee values('Barun',30000, DATEADD(mm,-3, GETDATE()))
insert into Employee values('Tarun',40000, DATEADD(mm,-3, GETDATE()))
insert into Employee values('Ajay',50000, DATEADD(mm,-3, GETDATE()))
insert into Employee values('Vijay',60000, DATEADD(mm,-3, GETDATE()))
insert into Employee values('Anil',70000, DATEADD(mm,-3, GETDATE()))
3. You can create a table to current date
Declare @Columns varchar(max)
Declare @SQL varchar(max)
select @Columns = coalesce(@Columns+',','')+ QUOTENAME(Mth) from
(
select distinct MONTH(CreatedOn)Mth from Employee
) as tblColumns
print @columns
set @SQL = '
;with cte as
(
select EmpName,Month(CreatedON)Mth,Salary from Employee
) select EmpName,'+@Columns+' from cte pivot
(
sum(salary) for Mth in ('+@Columns+')
) as pivotTable'
print @sql
execute(@SQL)
OUTPUT :