表一:年销售计划表
员工 部门 年计划销售额
张三 销售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部 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还有什么替代方法,谢谢!
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 行受影响)
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 #部门年计划销售额
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