select 人员,
sum(工作量) as 工作量总和,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数
from 表
group by 人员
sum(工作量) as 工作量总和,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数
from 表
group by 人员
解决方案 »
- DB2 字符串字段的合并
- 从文本导入数据去重?
- 怎样把纵表横显示出来?
- SQL Server 2005 企业版 32X慢,如何提速?
- MSSQL2005安装登录问题
- 配置发布和分发数据库 遇到问题 !
- SQL select数据问题
- 在线求助 datetime类型字段的时间转换问题
- SQL Server的安装问题
- 随机取数据,这个SQL语句该怎么写?
- 一个SQL存储过程记录集合循环的问题
- EXECUTE master.dbo.xp_sqlmaint N'-PlanID 3E972558-622F-4013-B0B4-AEF1F55E347E -WriteHistory -RebldIdx 10 -RmUnusedSpace 50 10 '
select 人员,
sum(工作量) as 工作量总和,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数
from 表
where 工作时间 between 开始时间 and 结束时间
group by 人员
对于这个结果: 可以用union 连接一个总的统计结果集,即select 人员,
sum(工作量) as 工作量总和,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数
from 表
where 工作时间 between 开始时间 and 结束时间
group by 人员unionselect null,sum(a.工作量总和),sum(a.及时记录数),sum(a.不及时记录数),
sum(a.满意记录数),sum(a.不满意记录数)
from
(select 人员,
sum(工作量) as 工作量总和,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数
from 表
where 工作时间 between 开始时间 and 结束时间
group by 人员)a
-------------------------
加条件时就象这样啊: where 工作时间 between '2003/01/05' and '2005/09/02'
及时率=个人及时数/个人总数*%也结合到SQL中
----------------------------
直接写的话就是,加条语句:
cast(及时记录数/(及时记录数+不及时记录数)*100 as varchar) +'%' as 及时率
就得到50.25%这样的形式!!!但要注意了, 由于及时记录数和不及时记录数都是整数,2/4 的结果是0 而2/4.0 的结果是 0.5
所以要改写一下:
cast(及时记录数/(及时记录数+不及时记录数+0.0)*100 as varchar) +'%' as 及时率
select 人员,
sum(工作量) as 工作量总和,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数,
sum(case 是否及时 when '是' then 1 else 0 end)/sum(工作量) as 及时率
from 表
where 工作时间 between 开始时间 and 结束时间
group by 人员
select '小王','5','是','是','2005-01-05' union all
select '小李','5','是','否','2005-09-02' union all
select '小毛','4','否','是','2005-01-05' union all
select '小蓝','9','否','否','2005-08-05' union all
select '小王','1','否','是','2005-01-05' select
人员,
sum(工作量)as 工作量总和 ,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数
from @a
group by 人员
-------------------------------
小蓝 9 0 1 0 1
小李 5 1 0 0 1
小毛 4 0 1 1 0
小王 6 1 1 2 0
sum(工作量) as 工作量总和,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数,
sum(case 是否及时 when '是' then 1 else 0 end)/sum(工作量) as 及时率
from 表
where 工作时间 between 开始时间 and 结束时间
group by 人员应该是正确的
insert @t
select '小王',5,'是','是','2005/01/05' union all
select '小李',5,'是','否','2005/09/02' union all
select '小毛',4,'否','是','2003/01/05' union all
select '小蓝',9,'否','否','2005/08/05' union all
select '小王',1,'否','是','2005/01/05'select 人员
,工作量总和=sum(工作量)
,及时记录数=sum(case 是否及时 when '是' then 1 when '否' then 0 end)
,不及时记录数=sum(case 是否及时 when '否' then 1 when '是' then 0 end)
,满意记录数=sum(case 是否满意 when '是' then 1 when '否' then 0 end)
,不满意记录数=sum(case 是否满意 when '否' then 1 when '是' then 0 end )
from @t
group by 人员/*
人员 工作量总和 及时记录数 不及时记录数 满意记录数 不满意记录数
小蓝 9 0 1 0 1
小李 5 1 0 0 1
小毛 4 0 1 1 0
小王 6 1 1 2 0
*/
insert @t
select '小王',5,'是','是','2005/01/05' union all
select '小李',5,'是','否','2005/09/02' union all
select '小毛',4,'否','是','2003/01/05' union all
select '小蓝',9,'否','否','2005/08/05' union all
select '小王',1,'否','是','2005/01/05'select 人员
,工作量总和=sum(工作量)
,及时记录数=sum(case 是否及时 when '是' then 1 when '否' then 0 end)
,不及时记录数=sum(case 是否及时 when '否' then 1 when '是' then 0 end)
,满意记录数=sum(case 是否满意 when '是' then 1 when '否' then 0 end)
,不满意记录数=sum(case 是否满意 when '否' then 1 when '是' then 0 end )
from @t
where 工作时间 between '2003/01/05' and '2005/09/02'
group by 人员
/*
人员 工作量总和 及时记录数 不及时记录数 满意记录数 不满意记录数
小蓝 9 0 1 0 1
小李 5 1 0 0 1
小毛 4 0 1 1 0
小王 6 1 1 2 0
*/
create table gz
(ry nvarchar(50),
gzl int,
ji nvarchar(10),
my nvarchar(10),
sj datetime)
go
insert gz
select '小王',5,'是','是','2005/01/05' union all
select '小李',5,'是','否','2005/09/02' union all
select '小毛',4,'否','是','2003/01/05' union all
select '小蓝',9,'否','否','2005/08/05' union all
select '小王',1,'否','是','2005/01/05'
go
--查询语句
select ry as 人员,
工作两总和 =sum(case gzl when gzl then gzl else '' end),
及时记录数 =sum(case ji when '是' then 1 else '' end),
不及时记录数=sum(case ji when '否' then 1 else '' end),
满意记录数 =sum(case my when '是' then 1 else '' end),
不满意记录数=sum(case my when '否' then 1 else '' end)
from gz
group by ry
-----result------
/*
人员 工作量总和 及时记录数 不及时记录数 满意记录数 不满意记录数
小蓝 9 0 1 0 1
小李 5 1 0 0 1
小毛 4 0 1 1 0
小王 6 1 1 2 0
*/
sum(工作量) as 工作量总和,
sum(case 是否及时 when '是' then 1 else 0 end) as 及时记录数,
sum(case 是否及时 when '否' then 1 else 0 end) as 不及时记录数,
sum(case 是否满意 when '是' then 1 else 0 end) as 满意记录数,
sum(case 是否满意 when '否' then 1 else 0 end) as 不满意记录数,
sum(case 是否及时 when '是' then 1 else 0 end)/sum(工作量) as 及时率
from 表
where 工作时间 between 开始时间 and 结束时间
group by 人员后面加ORDER BY 好象是不可以的.
真是佩服SQL版兄弟们的热情和好耐心
说实话,感觉楼主够懒,好象一点脑筋都不想动。这样能学到东西?
--查询语句
select ry as 人员,
工作两总和 =sum(case gzl when gzl then gzl else '' end),
及时记录数 =sum(case ji when '是' then 1 else '' end),
不及时记录数=sum(case ji when '否' then 1 else '' end),
满意记录数 =sum(case my when '是' then 1 else '' end),
不满意记录数=sum(case my when '否' then 1 else '' end)
from gz
group by ry
order by 工作两总和 desc
可以啊 怎么不可以order by 呢??????
楼主努力啊 不能总靠兄弟门帮忙啊