if object_id('tb') is not null
drop table tb
go
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')1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
20.00 40.00 60.00 80.00 100.00 120.00 140.00 160.00 180.00 200.00 220.00 240.00

解决方案 »

  1.   

    create table t1
    (
    monthy  varchar(5),
    dep varchar(3),
    yi int
    )
    insert into t1 values('一月','1',8 )
    insert into t1 values('二月','2',19)
    insert into t1 values('三月','3',10)
    insert into t1 values('一月','1',22)
    insert into t1 values('二月','3',12)
    insert into t1 values('三月','1',3)
    insert into t1 values('一月','2',5)
    insert into t1 values('二月','1',15)
    insert into t1 values('一月','1',17)
    insert into t1 values('三月','4',5)create table t2
    (dep varchar(3) primary key,
    depname varchar(8)
    )
    insert into t2 values('1','部门一')
    insert into t2 values('2','部门二')
    insert into t2 values('3','部门三')
    insert into t2 values('4','部门四')--动态查询
    declare @sql varchar(8000)
    select @sql=isnull(@sql+',','')+'sum(case when [monthy]='''+monthy+''' then yi else 0 end) as ['+monthy+']'
     from (select top 12 monthy from t1 group by monthy
    )t order by case monthy when '一月' then 1 when '二月' then 2 when '三月' then 3 endexec('select depname,'+@sql+' from (select a.*,b.depname from t1 a join t2 b on a.dep=b.dep)t group by depname')depname 一月 二月 三月
    部门二 5 19 0
    部门三 0 12 10
    部门四 0 0 5
    部门一 47 15 3别老不结帖
      

  2.   

    select depname as 部门名称,
    一月业绩=(select sum(yi) from t1 where dep=dep and monthy='一月'),
    二月业绩=(select sum(yi) from t1 where dep=dep and monthy='二月'),
    三月业绩=...
    ...
    from t2
      

  3.   

    请问楼上的朋友 按照你的思路 结果是是每个月所有部门的总和 不是各部门分别每个月的业绩结果
    select t2.depname as 部门名称, 
    一月业绩=(select sum(t1.yi) from t1,t2 where t1.dep=t2.dep and t1. monthy='一月'group by t1.monthy), 
    二月业绩=(select sum(t1.yi) from t1,t2 where t1.dep=t2.dep and t1.monthy='二月'group by t1.monthy), 
    三月业绩=(select sum(t1.yi) from t1,t2 where t1.dep=t2.dep and t1. monthy='三月'group by t1.monthy) 
     
    from t2