月份  金额
2      55.2
3       44
4      20变成 1月份  2月份  3月份....
0       55.2   44

解决方案 »

  1.   

    create table tb(id int,date datetime,sale decimal(10,2))
    insert into tb select 1,'2008-01-01',10
    insert into tb select 2,'2008-01-01',10
    insert into tb select 3,'2008-02-01',20
    insert into tb select 4,'2008-02-01',20
    insert into tb select 5,'2008-03-01',30
    insert into tb select 6,'2008-03-01',30
    insert into tb select 7,'2008-04-01',40
    insert into tb select 8,'2008-04-01',40
    insert into tb select 9,'2008-05-01',50
    insert into tb select 10,'2008-05-01',50
    insert into tb select 11,'2008-06-01',60
    insert into tb select 12,'2008-06-01',60
    insert into tb select 13,'2008-07-01',70
    insert into tb select 14,'2008-07-01',70
    insert into tb select 15,'2008-08-01',80
    insert into tb select 16,'2008-08-01',80
    insert into tb select 17,'2008-09-01',90
    insert into tb select 18,'2008-09-01',90
    insert into tb select 19,'2008-10-01',100
    insert into tb select 20,'2008-10-01',100
    insert into tb select 21,'2008-11-01',110
    insert into tb select 22,'2008-11-01',110
    insert into tb select 23,'2008-12-01',120
    insert into tb select 24,'2008-12-01',120--静态查询
    select 
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='01' then sale else 0 end) as '1月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='02' then sale else 0 end) as '2月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='03' then sale else 0 end) as '3月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='04' then sale else 0 end) as '4月',sum(case when datepart(yy,date)='2008' and datepart(mm,date)='05' then sale else 0 end) as '5月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='06' then sale else 0 end) as '6月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='07' then sale else 0 end) as '7月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='08' then sale else 0 end) as '8月',sum(case when datepart(yy,date)='2008' and datepart(mm,date)='09' then sale else 0 end) as '9月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='10' then sale else 0 end) as '10月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='11' then sale else 0 end) as '11月',
    sum(case when datepart(yy,date)='2008' and datepart(mm,date)='12' then sale else 0 end) as '12月'
    from tb
    --插入2009年数据
    insert into tb select 25,'2009-01-01',10
    --动态查询
    declare @sql varchar(max)
    select @sql=isnull(@sql+',','')+'sum(case when datepart(yy,date)='''+ltrim([year])+''' and datepart(mm,date)='''+ltrim([month])+''' then sale else 0 end) as ['+ltrim([year])+'年'+ltrim([month])+'月]'
    from (select distinct datepart(yy,date) as [year],datepart(mm,date) as [month] from tb)a
    exec('select '+@sql+' from tb')