SQL Server 2005 T-SQL学习笔记:建立动态的PIVOT

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值