有如下表结构
姓名 项目 奖金 时间
张三 项目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