日期:2014-05-18  浏览次数:20663 次

如何写SQL语句,江湖!!!!
统计任务完成情况:
有三张表
1.Tb_Users(用户)
Key Field Name 属性 NOT NULL 默认值 字段说明
● UserId int ○ 用户ID(自动生成)
UserCount varchar(50) ○ 用户帐号
UserName varchar(50) ○ 用户姓名
UserPwd varchar(20) ○ 登陆密码
RoleId int ○ 外键 用户角色(角色表外键),(0:系统管理员 1:主管 2:管理员)
StateId int ○ 外键 用户状态(0:正常 1:禁用)

2.Tb_Task(任务表)
● TaskId int ○ 任务ID(自动生成)
TaskName varchar(50) ○ 任务名称
TaskContent varchar(max) ○ 任务内容
TaskDemand varchar(max) ○ 任务要求
CreatedTime datetime ○ 下达时间
EndTime datetime ○ 截止时间
DelayTime datetime 延至期限
Alloter varchar(50) ○ 任务分配人(默认是主管)
UserId int ○ 外键 任务执行人(User表)
FinishTime datatime ○ 实际完成时间
TaskStatusId int ○ 外键 任务状态(任务状态表)(未执行、执行中、已完成、未完成 、延时)
Remark varchar(max) 备注

3.Tb_TaskCheck(任务检查表)
Key Field Name 属性 NOT NULL 默认值 字段说明
● TaskCheckId int ○ ID(自动生成)
TaskId int ○ 任务ID
Checker varchar(50) ○ 任务检查人(默认为主管)
CheckStatusName varchar(10) ○ 检查状态(未检查、已检查)
CheckResult varchar(10) ○ 检查结果(合格、整改)
CheckSuggestion varchar(max) 检查意见


任务执行人 分配任务数 完成任务数 合格任务数 ?(不会) 合格率?(不会)

1 6 1
2 8 5
3 5 2
4 5 0
5 1 0
6 1 0

我只会统计前3个,代码如下:
select UserId as 任务执行人 ,COUNT(TaskId) as 分配任务数
  ,SUM(CASE WHEN TaskStatusId=3 THEN 1 ELSE 0 END) AS 完成任务数
from Tb_Task group by UserId 

合格任务数 貌似要统计任务检查表里面的select TaskId,SUM(CASE WHEN CheckResult='合格' THEN 1 ELSE 0 END) AS 合格任务数
 from Tb_TaskCheck group by TaskId
合格率 = 完成任务数/分配任务数 不知道该用什么函数实现 ,
不知道如何写SQL语句,才能实现以上页面????????????求高人相助!!!!!!

------解决方案--------------------
SQL code
合格率=ltrim(cast(SUM(CASE WHEN TaskStatusId=3 THEN 1 ELSE 0 END)/COUNT(TaskId) as dec(18,2)))+'%'

------解决方案--------------------
sum聚合case判断