是这样的
其他字段省略
表A
ID     Name       IsPass
1      小明       通过
2      小明       未通过
3      小明       通过
4      小刚       通过
5      小刚       未通过
6      小刚       未通过
7      小红       通过
8      小红       通过
9      小红       通过
10     小红      未通过求表A里所有人的通过率即如下结果Name      PassRate
小明      66.7%
小刚      50%
小红      75%

解决方案 »

  1.   

    select name,sum(case when IsPass= '通过' then 1 else 0 end)* 100.0/count(1)
    from ta
    group by name
      

  2.   

    select  T1.name,count(1)/ (select count(1) from A where A.name = T1.name  group by name) as PassRate
     from A T1  where  T1.IsPass='通过' group by T1.name
      

  3.   

    这个count(1)怎么个理解,尤其是这个1怎么理解呢
      

  4.   

    就是输出个数,和COUNT(*)一样
      

  5.   

    SELECT  NAME ,
            LEFT(CONVERT(VARCHAR, ( SUM(CASE ispass
                                          WHEN '通过' THEN 1
                                          ELSE 0
                                        END) * 1.00 / COUNT(ispass) * 1.00 ) * 100),
                 2) + '%'
    FROM    dbo.TB
    GROUP BY NAME 
    /*NAME (无列名)
    小刚 33%
    小红 75%
    小明 66%*/参考
      

  6.   

    select Name
    , PassRate = convert(varchar(10), convert(float(2), convert(float, count(IsPass))/(select convert(float, count(IsPass)) from A where Name = x.Name group by Name)) * 100) + '%'
    from A x where IsPass = '通过' group by Name
      

  7.   

    select Name
    , PassRate = convert(varchar(10), convert(float, convert(decimal(5,3), convert(float, count(IsPass))/(select convert(float, count(IsPass)) from A where Name = x.Name group by Name)) * 100)) + '%'
    from A x where IsPass = '通过' group by Name
      

  8.   

    select name,sum(case when IsPass= '通过' then 1 else 0 end)* 100.0/count(1)
    from ta
    group by name
      

  9.   


    drop table #pass
    create table #pass
    (
      id int,
      name varchar(100),
      ispass varchar(100)
    )insert into #pass values(1, '小明', '通过')
    insert into #pass values(2, '小明', '未通过')
    insert into #pass values(3, '小明', '通过')
    insert into #pass values(4, '小刚', '通过')
    insert into #pass values(5, '小刚', '未通过')
    insert into #pass values(6, '小刚' ,'未通过')
    insert into #pass values(7, '小红', '通过')
    insert into #pass values(8, '小红' ,'通过')
    insert into #pass values(9, '小红' ,'通过')
    insert into #pass values(10, '小红' ,'未通过')select * from #passselect name,
    (sum((case when ispass = '通过' then 1 else 0 end) + 0.0) / (select count(b.id) from #pass b
    where b.name = a.name)) as passRate
    from #pass a
    group by name
      

  10.   

    if object_id('tb8') is not null drop table tb8
    go
    create table tb8
    (
    ID int,
    [Name] varchar(25),
    IsPass varchar(10)
    )
    insert tb8
    select 1,'小明','通过' union all
    select 2,'小明','未通过' union all
    select 3,'小明','通过' union all
    select 4,'小刚','通过' union all
    select 5,'小刚','未通过' union all
    select 6,'小刚','未通过' union all
    select 7,'小红','通过' union all
    select 8,'小红','通过' union all
    select 9,'小红','通过' union all
    select 10,'小红','未通过' 
    select * from [tb8]
    go
    select [Name],
    '通过率' =convert(varchar(5),sum(case IsPass when '通过' then 1 else 0 end)*100/count(1))+'%'
    from tb8
    group by [Name]--删除表
    drop table tb8
      

  11.   

    count(1)与count(*)没有什么多大别,用count(1)主要从查询效率去考虑的,用count(1)执行查询的效率要高一些