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