首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

【Stef-SQL查询】查询求百分比,求大侠们相助

2012-08-30 
【Stef-SQL查询】查询求百分比,求大侠们帮助表AnamestatusA1PassA2FailA3PassA2PassA2PassA4PassA5PassA2Fai

【Stef-SQL查询】查询求百分比,求大侠们帮助
表A

 name status

 A1 Pass
 A2 Fail
 A3 Pass
 A2 Pass
 A2 Pass
 A4 Pass
 A5 Pass
 A2 Fail
 A5 Pass
 A6 Pass
 A2 Fail

 如何写sql语句,得出以下结果:
name StatusTime Pass Pass-Ratio  

A2 5 2 40%

[解决办法]

SQL code
--> --> (Roy)生成測試數據 if not object_id('Tempdb..#') is null    drop table #GoCreate table #([name] nvarchar(2),[status] nvarchar(4))Insert #select N'A1',N'Pass' union allselect N'A2',N'Fail' union allselect N'A3',N'Pass' union allselect N'A2',N'Pass' union allselect N'A2',N'Pass' union allselect N'A4',N'Pass' union allselect N'A5',N'Pass' union allselect N'A2',N'Fail' union allselect N'A5',N'Pass' union allselect N'A6',N'Pass' union allselect N'A2',N'Fail'GoSelect [name],StatusTime=COUNT(1),Pass=sum(case when [status]=N'Pass' then 1 else 0 end),[Pass-Ratio]=str(sum(case when [status]=N'Pass' then 1 else 0 end)*100.0/COUNT(1),6,2)+'%'from # group by [name]/*name    StatusTime    Pass    Pass-RatioA1    1    1    100.00%A2    5    2     40.00%A3    1    1    100.00%A4    1    1    100.00%A5    2    2    100.00%A6    1    1    100.00%*/
[解决办法]
SQL code
SELECT name,COUNT(*) as statusTime,SUM(case when status='pass' then 1 else 0 end) as pass,CONVERT(varchar, CONVERT(float,SUM(case when status='pass' then 1 else 0 end))/COUNT(*)*100)+'%' as PassRatio  FROM A  GROUP BY name 

热点排行