有如下表结构

姓名  项目   奖金 时间

张三  项目1  174  2010-01-01 

张三  项目2  833  2010-01-02 

张三  项目3  934  2010-01-03

李四  项目1  745  2010-01-01

李四  项目2  845 2010-01-02

李四  项目3  946  2010-01-03

王五  项目1  33  2010-01-01

变成姓名 项目 奖金的交叉表:

DECLARE @sbegin NVARCHAR(max)
	 
	SET @sbegin ='select * from (select 姓名,项目 ,奖金 from  tb) a pivot (max(奖金) for 项目 in('
	DECLARE @send NVARCHAR(100);
	SET @send=')) p';
 
 
	DECLARE @sColum nvarchar(1000)
	SET @sColum = ''
	SELECT @sColum = @sColum+ '['+项目+']'  +',' FROM (SELECT  DISTINCT(项目) AS 项目  FROM tb	 ) t
	SET @sColum= substring(@sColum,1,len(@sColum)-1)
	EXEC (@sbegin+@sColum+@send)

 

要统计最近3次奖金情况

 

 select * from
 (select 姓名,num ,奖金  from (select row_number() over(partition by 姓名 order by 时间) as num,* from tb) a where num<=3  )
 as c pivot ( max(奖金) for  num  in ( [3] , [2],[1])) a 

posted on 2011-01-21 09:17  fuhui  阅读(156)  评论(0编辑  收藏  举报