Feeds:
Posts
Comments

Posts Tagged ‘Dynamic Pivot SQL Server’

Create a table for this example

 

create table
Employee

(

emp_id int ,

dept_id varchar(20) ,

no_of_leave int

)

 

 

 

 

·        
Populate this table

 

 

declare @empid int

 

declare @noofleave int

 

set @empid=1

 

set @noofleave=0

 

while 
@empid
<11

 

begin

 

insert into
Employee

 

values (@empid,‘A’,@noofleave)

 

set @empid=@empid+1

 

set @noofleave=@noofleave+5

 

end

 

 

GO

 

declare @empid int

 

declare @noofleave int

 

set @empid=20

 

set @noofleave=0

 

while 
@empid
<31

 

begin

 

insert into
Employee

 

values (@empid,‘B’,@noofleave)

 

set @empid=@empid+1

 

set @noofleave=@noofleave+3

 

end

 

GO

 

 

 

declare
@empid 
int

 

declare
@noofleave 
int

 

set
@empid
=40

 

set
@noofleave
=0

 

while 
@empid
<51

 

begin

 

insert
into Employee

 

values
(@empid,‘C’,@noofleave)

 

set
@empid
=@empid+1

 

set
@noofleave
=@noofleave+7

 

end

 

GO

 

·        
Basic Pivot

 

 

 

select *
FROM Employee

 

pivot (sum(no_of_leave) for emp_id in ([1],[21])) pvt

 

 

 

 

·        
Dynamic Pivot

 

 

 

DECLARE @PivotColumn VARCHAR(MAX)

 

SELECT @PivotColumn =

 

COALESCE(

 

@PivotColumn + ‘,[‘ + cast(emp_id as varchar) + ‘]‘,

 

‘[‘ +
cast(emp_id as varchar)+ ‘]‘

 

)

 

FROM (

 

select distinct
emp_id 
from Employee)b

 

 

 

DECLARE @PivotSQL NVARCHAR(MAX)

 

SET @PivotSQL = N

 

SELECT *

 

FROM (

 

select
emp_id,dept_id,no_of_leave FROM Employee

 

) AS
PivotData

 

PIVOT (

 

SUM(no_of_leave)

 

FOR emp_id
IN (

 

 +
@PivotColumn 
+ 

 

)

 

) AS
PivotTable

 

 

 

 

EXECUTE(@PivotSQL)

 

 

Read Full Post »

%d bloggers like this: