本帖最后由 celery916 于 2011-12-08 12:43:13 编辑

解决方案 »

  1.   

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

  2.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2011-12-08 14:37:57
    -- Version:
    --      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86) 
    -- Apr 22 2011 11:57:00 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([任务执行人] int,[分配任务数] int,[完成任务数] int,[合格任务数] int,[合格率] varchar(100))
    insert [tb]
    select 1,6,1,null,null union all
    select 2,8,5,null,null union all
    select 3,5,2,null,null union all
    select 4,5,0,null,null union all
    select 5,1,0,null,null union all
    select 6,1,0,null,null
    --------------开始查询--------------------------
    select
     *,
     合格率=LTRIM(cast(完成任务数*100.0/分配任务数 as DEC(18,2)))+'%'
     from [tb]
    ----------------结果----------------------------
    /* 任务执行人       分配任务数       完成任务数       合格任务数       合格率                                                                                                  合格率
    ----------- ----------- ----------- ----------- ---------------------------------------------------------------------------------------------------- ------------------------------------------
    1           6           1           NULL        NULL                                                                                                 16.67%
    2           8           5           NULL        NULL                                                                                                 62.50%
    3           5           2           NULL        NULL                                                                                                 40.00%
    4           5           0           NULL        NULL                                                                                                 0.00%
    5           1           0           NULL        NULL                                                                                                 0.00%
    6           1           0           NULL        NULL                                                                                                 0.00%(6 行受影响)
    */少乘以了100.0
      

  3.   

    谢谢!那任务的合格任务数该怎么用SQL语句写呢???貌似要用多表连接啊??还是
    合格任务数 貌似要统计任务检查表里面的select TaskId,SUM(CASE WHEN CheckResult='合格' THEN 1 ELSE 0 END) AS 合格任务数
    我只会统计每个任务的合格数,并不会统计每个人每个任务的合格任务数???
    也就是如何实现下面的表呢
    任务执行人 分配任务数 完成任务数 合格任务数 ?(不会) 合格率?(不会)