----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;