2015-08-26 169 views
0

OK,想象我有200行一列,每行是一个值是由4,8,2或0。有没有一种方法来划分的时候2,0出现COUNT反对4和8的COUNT时间发生?像这样:使用数学计算百分比

(COUNT(2, 0)/COUNT(4, 8)) * 100 

谢谢! :)

编辑:

上了下面的语句0除错误,虽然这样做COUNT(*),其中Completion_Event_Type_Key IN(2,0)或(8,4)返回300万行

SELECT DISTINCT 

    SD.Last_Secondary_School_Name AS 'School', ((SELECT COUNT(*) where CC.Completion_Event_Type_Key IN (2,0))/(SELECT COUNT(*) where CC.Completion_Event_Type_Key IN (4, 8)))*100 

FROM [AUTDataWarehouse].[dbo].[Fact_Admission] AS FA 

INNER JOIN [AUTDataWarehouse].[dbo].[Dim_Student_Demographics] AS SD ON SD.Student_Demographics_Key = FA.Student_Demographics_Key 

INNER JOIN [AUTDataWarehouse].[dbo].[Fact_SDR_Course_Completion] AS CC ON FA.Student_Demographics_Key = CC.Student_Demographics_Key 

GROUP BY 

SD.Last_Secondary_School_Name, CC.Completion_Event_Type_Key 

ORDER BY SD.Last_Secondary_School_Name 
+0

它是MySQL或SQL服务器? – Blorgbeard

+0

SQL Server Management Studio中 –

回答

2

你可以这样说:

select 
    sum(case when value in (2,0) then 1 else 0 end)/
    sum(case when value in (4,8) then 1 else 0 end) * 100 
from table 

零谨防师,虽然。如果不存在具有4,8行的行,则可能需要特殊处理。

鉴于你的问题查询,您的SQL应该是这个样子:

SELECT  
    SD.Last_Secondary_School_Name AS 'School', 
    sum(case when CC.Completion_Event_Type_Key IN (2,0) then 1 else 0 end)/
    sum(case when CC.Completion_Event_Type_Key IN (4,8) then 1 else 0 end) * 100  

FROM [AUTDataWarehouse].[dbo].[Fact_Admission] AS FA 

INNER JOIN [AUTDataWarehouse].[dbo].[Dim_Student_Demographics] AS SD ON SD.Student_Demographics_Key = FA.Student_Demographics_Key  
INNER JOIN [AUTDataWarehouse].[dbo].[Fact_SDR_Course_Completion] AS CC ON FA.Student_Demographics_Key = CC.Student_Demographics_Key 

GROUP BY SD.Last_Secondary_School_Name, CC.Completion_Event_Type_Key 

ORDER BY SD.Last_Secondary_School_Name 
+0

使用这个我零错误有一个师,虽然当我单独运行一个查询计数所有的时间值IN(4,8)我真的很喜欢使用这种得到1731325 –

+0

,或者你把查询你的问题? – Blorgbeard

+0

使用这个statemnt,虽然错误是我的错,但我改变了我的Join语句,现在它没有给出错误,但将返回0,不是我预期的答案 –