Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1241900
  • 博文数量: 510
  • 博客积分: 20296
  • 博客等级: 上将
  • 技术积分: 4680
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-30 03:58
文章存档

2011年(13)

2010年(92)

2009年(242)

2008年(163)

我的朋友

分类: 数据库开发技术

2010-08-21 14:05:20


利用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;
阅读(1197) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-08-24 14:53:39

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com

chinaunix网友2010-08-24 14:53:39

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com