表一:年销售计划表
员工 部门 年计划销售额
张三 销售1部 10000
李四 销售1部 10000
王五 销售2部 11000
黄天生 销售1部 12000
王味 销售2部 11500
李科技 销售2部 12000
李守易 销售2部 8000表二:每月实际销售
员工 部门 月份 销售额
张三 销售1部 1 800
李四 销售1部 1 750
王五 销售2部 1 900
黄天生 销售1部 1 770
王味 销售2部 1 1000
李科技 销售2部 1 650
李守易 销售2部 1 800
张三 销售1部 2 900
李四 销售1部 2 522
王五 销售2部 2 424
黄天生 销售1部 2 1212
王味 销售2部 2 554
李科技 销售2部 2 1244
李守易 销售2部 2 900
张三 销售1部 3 800
李四 销售1部 3 600
王五 销售2部 3 808
黄天生 销售1部 3 990
王味 销售2部 3 1210
李科技 销售2部 3 555
李守易 销售2部 3 750请问各位大侠,怎样写sql在一张表实现以下表的功能(各部门销售进度):
部门   年计划销售额   1-3月实际销售额   完成进度我用gridview显示,或者除了用SQL还有什么替代方法,谢谢!

解决方案 »

  1.   


    declare @a table(员工 varchar(20),部门 varchar(20), 年计划销售额 int )
    insert @a select         
    '张三' ,  '销售1部' ,10000 union all select 
    '李四' ,  '销售1部' ,10000 union all select 
    '王五' ,  '销售2部' ,11000 union all select 
    '黄天生', '销售1部' ,12000 union all select 
    '王味' ,  '销售2部' ,11500  union all select 
    '李科技' ,'销售2部' ,12000  union all select 
    '李守易' ,'销售2部', 8000  declare @b table(员工 varchar(20),部门 varchar(20),月份 int ,销售额  int )
    insert @b select          
    '张三',   '销售1部', 1 ,800 union all select 
    '李四' ,  '销售1部', 1 ,750 union all select
    '王五' ,  '销售2部', 1 ,900 union all select
    '黄天生', '销售1部', 1 ,770 union all select
    '王味' ,  '销售2部', 1 ,1000 union all select
    '李科技', '销售2部', 1 ,650 union all select
    '李守易' ,'销售2部', 1 ,800 union all select
    '张三' ,  '销售1部', 2 ,900 union all select
    '李四' ,  '销售1部', 2 ,522 union all select
    '王五' ,  '销售2部', 2 ,424 union all select
    '黄天生', '销售1部', 2 ,1212 union all select
    '王味' ,  '销售2部', 2 ,554 union all select
    '李科技', '销售2部', 2 ,1244 union all select
    '李守易' ,'销售2部', 2 ,900 union all select
    '张三' ,  '销售1部', 3 ,800 union all select
    '李四' ,  '销售1部', 3 ,600 union all select
    '王五' ,  '销售2部', 3 ,808 union all select
    '黄天生', '销售1部', 3 ,990 union all select
    '王味' ,  '销售2部', 3 ,1210 union all select
    '李科技', '销售2部', 3, 555 union all select
    '李守易' ,'销售2部', 3, 750 --部门  年计划销售额  1-3月实际销售额  完成进度 select a.部门, 
    [年计划销售额]=sum(年计划销售额) ,  
    [1-3月实际销售额]= sum(case when 月份 in (1,2,3) then 销售额 else 0 end),
    [完成进度]=left(ltrim(1.00*sum(case when 月份 in (1,2,3) then 销售额 else 0 end)/sum(年计划销售额)*100),6)+'%'
    from @a a,@b b
    where a.部门=b.部门
    group by a.部门
    部门                   年计划销售额      1-3月实际销售额   完成进度
    -------------------- ----------- ----------- -------------
    销售1部                 288000      22032       7.6500%
    销售2部                 510000      39180       7.6823%(2 行受影响)
      

  2.   


    if object_ID('tempdb.dbo.#部门一至三月实际销售额') is not null drop table #部门一至三月实际销售额
    if object_ID('tempdb.dbo.#部门年计划销售额') is not null drop table #部门年计划销售额select 部门,sum(销售额) as 一至三月实际销售额 into #部门一至三月实际销售额 from 每月实际销售 
    where 月份 between 1 and 3
    Group by 部门select 部门,sum(年计划销售额) 年计划销售额 into #部门年计划销售额  from 年销售计划表
    Group by 部门select a.部门,年计划销售额,一至三月实际销售额,convert(numeric(9,4),一至三月实际销售额)/convert(numeric(9,4),年计划销售额) as  完成进度 from #部门一至三月实际销售额 a
    inner join #部门年计划销售额 b on a. 部门=b.部门
    Group by a.部门,年计划销售额,一至三月实际销售额if object_ID('tempdb.dbo.#部门一至三月实际销售额') is not null drop table #部门一至三月实际销售额
    if object_ID('tempdb.dbo.#部门年计划销售额') is not null drop table #部门年计划销售额
      

  3.   

    select 表一.部门,表一.年计划销售额,表二.实际销售额,(表二.销售额/表一.年销售计划) as 完成进度 from 表一,表二 where 表一.部门=表二.部门 and (表二.月份>31 or 表二.月份<=3)
      

  4.   

    declare @t1 table( employeeName varchar(30) , deptname varchar(20), salaryNum decimal(10,2))
    declare @t2 table( employeeName varchar(30) , deptname varchar(20), [month] int , salaryNum decimal(10,2))insert into @t1 values('张三', '销售1部', 10000) 
    insert into @t1 values('李四', '销售1部', 10000 )
    insert into @t1 values('王五' ,'销售2部', 11000 )
    insert into @t1 values('黄天生','销售1部', 12000) 
    insert into @t1 values('王味', '销售2部', 11500 )
    insert into @t1 values('李科技', '销售2部', 12000) 
    insert into @t1 values('李守易', '销售2部', 8000 )insert into @t2 values('张三', '销售1部', 1 ,800 )
    insert into @t2 values('李四', '销售1部', 1 ,750 )
    insert into @t2 values('王五', '销售2部', 1 ,900 )
    insert into @t2 values('黄天生', '销售1部', 1 ,770) 
    insert into @t2 values('王味', '销售2部', 1 ,1000 )
    insert into @t2 values('李科技', '销售2部', 1, 650 )
    insert into @t2 values('李守易', '销售2部', 1 ,800 )
    insert into @t2 values('张三', '销售1部', 2 ,900 )
    insert into @t2 values('李四', '销售1部', 2 ,522 )
    insert into @t2 values('王五', '销售2部', 2 ,424 )
    insert into @t2 values('黄天生', '销售1部', 2, 1212) 
    insert into @t2 values('王味', '销售2部', 2 ,554 )
    insert into @t2 values('李科技', '销售2部', 2, 1244) 
    insert into @t2 values('李守易', '销售2部', 2 ,900 )
    insert into @t2 values('张三', '销售1部', 3 ,800 )
    insert into @t2 values('李四', '销售1部', 3 ,600 )
    insert into @t2 values('王五', '销售2部', 3 ,808 )
    insert into @t2 values('黄天生', '销售1部', 3, 990) 
    insert into @t2 values('王味', '销售2部', 3 ,1210 )
    insert into @t2 values('李科技', '销售2部', 3, 555 )
    insert into @t2 values('李守易', '销售2部', 3 ,750 )
    select A.deptname , A.salaryNum as '年计划销售额' , B.salaryNum as '1-3月实际销售额', 
    Convert( varchar(10),Convert( decimal(10,2),B.salaryNum/A.salaryNum*100)) +'%' as '完成进度'
    from (select deptname,sum(salaryNum) as salaryNum   from @t1 group by deptname)A
    inner join (select deptname,sum(salaryNum) as salaryNum  from @t2 where [month] between 1 and 3 group by deptname)B 
    on A.deptname= B.deptname