2015-08-26 168 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,不是我預期的答案 –