日期:2014-05-16 浏览次数:20457 次
create table test1(id int,部门 varchar(10),任务 varchar(10),计划完成时间 datetime)
insert test1
select 1,'部门1','任务1','2014-04-22' union all
select 2,'部门2','任务2','2014-04-26' union all
select 3,'部门1','任务3','2014-04-21' union all
select 4,'部门2','任务4','2014-04-20'
create table test2(id int,任务 varchar(10),实际完成时间 datetime)
insert test2
select 1,'任务1','2014-04-21' union all
select 2,'任务2','2014-04-22' union all
select 3,'任务3','2014-04-23' union all
select 4,'任务4','2014-04-14'
select a.部门,
完成率=CAST(SUM(case when a.计划完成时间>=b.实际完成时间 then 1 else 0 end)*100/COUNT(*) as varchar)+'%'
from test1 a
inner join test2 b
on a.任务=b.任务
group by a.部门
/*
部门1 50%
部门2 100%
*/
select a.部门, b.完成任务数量 / a.任务数量 as 完成率 from
(select 部门,COUNT(0) AS 任务数量 from 表1 group by 部门) a,
(select 表1.部门, COUNT(0) AS 完成任务数量 from 表1, 表2
where 表1.任务 = 表2.任务
and 表1.计划完成时间 >= 表2.实际完成时间
group by 表1.部门) b
where a.部门 = b.部门
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([ID] int,[部门] varchar(6),[任务] varchar(6),[计划完成时间] datetime)
insert [a]
select 1, '部门1','任务1','2014/4/22' union all
select 2, '部门2','任务2','2014/4/26' union all
select 3, '部门1','任务3','2014/4/21' union all
select 4, '部门2','任务4','2014/4/20'
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go
create table [b]([ID] int,[任务] varchar(6),[实际完成时间] datetime)
insert [b]
select 1,'任务1','2014/4/21' union all
select 2,'任务2','2014/4/22' union all
select 3,'任务3','2014/4/23' union all
select 4,'任务4','2014/4/14'
--查询语句
select a.部门,cast(cast(sum(case when a.计划完成时间>=a.实际完成时间 then 1 else 0 end) as float)/(count(a.部门))*100 as varchar(10))+'%' as '完成率'
from
(
select a.*,b.实际完成时间 from a a left join b b on a.[任务]=b.[任务]
) a
group by a.部门\
--结果
/*
部门 完成率
------ -----------
部门1 50%
部门2 100%
(2 行受影响)
*/