22,302
社区成员




测试数据
select * into #t from (
SELECT 'A' as name,'20110505' as pdate,5 as data UNION ALL
SELECT 'A','20110606',10 UNION ALL
SELECT 'B','20120103',8 UNION ALL
SELECT 'C','20130605',18) a
declare @c nvarchar(500)
declare @s nvarchar(max)
select @c=ISNULL(+@c+',','')+pdate from (select distinct '['+convert(nvarchar(10),YEAR(pdate))+']'pdate from #t) a
print @c
set @s='
select * from (
select name,YEAR(pdate)pdate,data from #t
) p pivot (sum(data) for pdate in ('+@c+'))t'
print @s
exec (@s)