
----Static PIVOT===========

select * from

(

select CustomerID, datepart(yyyy,OrderDate) as Years, 1 As Counts

from Sales.SalesOrderHeader

) piv PIVOT

(

sum(Counts)

for Years in ([2001],[2002],[2003])

) as chd

Order By CustomerID

--Dynamic PIVOT============

declare @Years as nvarchar(100);

with YearCTE as

(

select distinct year(OrderDate) as YearNum from Sales.SalesOrderHeader

)

select @Years = isnull(@Years + N',[', '[' ) + cast(YearNum as nvarchar(4)) + ']' from YearCTE order by YearNum;

print @Years;

declare @Sql as nvarchar(max);

set @Sql = N'select * from

(

select CustomerID, datepart(yyyy,OrderDate) as Years, 1 As Counts

from Sales.SalesOrderHeader

) piv PIVOT

(

sum(Counts)

for Years in (' + @Years + ')

) as chd

Order By CustomerID';

execute sp_executesql @sql;