Heim >Datenbank >MySQL-Tutorial >SQL Server 2005 PIVOT 用法示例

SQL Server 2005 PIVOT 用法示例

WBOY
WBOYOriginal
2016-06-07 16:21:18980Durchsuche

最近学习 SQL 2005的新特性,可能很多人都知道了,我反应比较慢,过两天都2010年了,才开始学2005.总结一下: 表如下: create table tb(ID varchar(50),CName varchar(50),Amount money,ActionDate datetime) insert into tb values('001','a',2000.00,'200

   最近学习 SQL 2005的新特性,可能很多人都知道了,,我反应比较慢,过两天都2010年了,才开始学2005.总结一下:

  表如下:

  create table tb(ID varchar(50),CName varchar(50),Amount money,ActionDate datetime)

  insert into tb values('001','a',2000.00,'2008-02-28')

  insert into tb values('001','a',1560.00,'2008-03-28')

  insert into tb values('001','a',2040.00,'2008-01-28')

  insert into tb values('001','a',1003.00,'2008-04-28')

  insert into tb values('101','b',3100.00,'2008-03-28')

  insert into tb values('101','b',4040.00,'2008-01-28')

  insert into tb values('101','b',5003.00,'2008-04-28')

  insert into tb values('101','b',2400.00,'2008-02-28')

  insert into tb values('001','a',15000.00,'2007-12-21')

  insert into tb values('101','b',22400.00,'2007-12-21')

  ---------要将数据转换成如下:

  ID CName 2007-12 2008-01 2008-02 2008-03 2008-04

  001 a 15000.00 2040.00 2000.00 1560.00 1003.00

  101 b 22400.00 4040.00 2400.00 3100.00 5003.00

  实现步骤如下:

  -----

  select ID,CName,sum(amount) as amount,left(convert(varchar(20),Actiondate,120),7) as Actiondate

  into #tmp

  from tb

  group by ID,CName,left(convert(varchar(20),Actiondate,120),7)

  declare @sql varchar(max), @sqlAll nvarchar(max)

  select @sql=''

  select @sql=@sql+'['+Actiondate+'],'

  from #tmp group by Actiondate

  select @sql=left(@sql,len(@sql)-1)

  print @sql

  select @sqlAll='

  select * from #tmp s

  pivot

  (sum(amount)

  for Actiondate in ('+@sql+')

  ) as P order by ID,CName '

  print @sqlAll

  ------Step4

  exec sp_executesql @sqlAll

  drop table #tmp

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn