阿牛 - 专注.NET开发

如果梦想与实现之间有一道不可逾越的鸿沟,那么“执行力”就是跨越这道鸿沟的桥梁。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

利用CTE,我们可以方便地一列中的所有值连接成一个字串,然后在PIVOT语句中使用,以下是示例:

 

----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;
posted on 2008-06-25 14:05  阿牛-专注金融行业开发  阅读(866)  评论(0)    收藏  举报