----Static PIVOT=========== select*from ( select CustomerID, datepart(yyyy,OrderDate) as Years, 1As Counts from Sales.SalesOrderHeader ) piv PIVOT ( sum(Counts) for Years in ([2001],[2002],[2003]) ) as chd OrderBy CustomerID
--Dynamic PIVOT============ declare@Yearsasnvarchar(100); with YearCTE as ( selectdistinctyear(OrderDate) as YearNum from Sales.SalesOrderHeader ) select@Years=isnull(@Years+ N',[', '[' ) +cast(YearNum asnvarchar(4)) +']'from YearCTE orderby YearNum;
print@Years;
declare@Sqlasnvarchar(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;