是这样的
其他字段省略
表A
ID Name IsPass
1 小明 通过
2 小明 未通过
3 小明 通过
4 小刚 通过
5 小刚 未通过
6 小刚 未通过
7 小红 通过
8 小红 通过
9 小红 通过
10 小红 未通过求表A里所有人的通过率即如下结果Name PassRate
小明 66.7%
小刚 50%
小红 75%
其他字段省略
表A
ID Name IsPass
1 小明 通过
2 小明 未通过
3 小明 通过
4 小刚 通过
5 小刚 未通过
6 小刚 未通过
7 小红 通过
8 小红 通过
9 小红 通过
10 小红 未通过求表A里所有人的通过率即如下结果Name PassRate
小明 66.7%
小刚 50%
小红 75%
from ta
group by name
from A T1 where T1.IsPass='通过' group by T1.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%*/参考
, 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
, 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
from ta
group by name
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
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