2014-09-04 24 views
0

我有以下案件陳述給予我。案件陳述返回相同的流程

SELECT schoolc, 
    COUNT(CASE WHEN (subtestc) IN('ela','Math') AND tscrtypc ='A'THEN (ident) ELSE 0 END)AS  [total Students], 
    COUNT(CASE WHEN (testscore)IN('A','P') AND subtestc IN('ela','Math') AND tscrtypc ='A'THEN (ident) ELSE 0 END)AS [students above] 

    FROM [dbo].[qw_star_testing_detail] 
    WHERE subtestc IN('ela','Math') 
    AND tscrtypc ='A' 
    GROUP BY schoolc 

它試圖做兩個單獨的計算總學生和學生上面,但它是兩個相同的價值。當我運行這個我得到1966這是正確的,但是當我將它應用到我的情況我得到2362。我必須是簡單的東西。

select COUNT(ident),schoolc 
    FROM [dbo].[qw_star_testing_detail] 
    WHERE subtestc IN('ela','Math') 
    AND tscrtypc ='A' 
    AND testscore IN('A','P') 
    GROUP BY schoolc 
    ORDER BY schoolc 

回答

0

COUNT([column])返回結果集中具有指定列中非空值的行數。嘗試是這樣的:

SELECT schoolc, 
    SUM(CASE WHEN (subtestc) IN ('ela','Math') AND tscrtypc ='A'THEN 1 ELSE 0 END) AS [total Students], 
    SUM(CASE WHEN (testscore)IN ('A','P') AND subtestc IN ('ela','Math') AND tscrtypc ='A'THEN 1 ELSE 0 END) AS [students above] 
FROM [dbo].[qw_star_testing_detail] 
WHERE subtestc IN('ela','Math') 
AND tscrtypc ='A' 
GROUP BY schoolc 
+0

非常感謝,現在想補充一點,我想從上述兩個百分比。嘗試以下 – 2014-09-04 18:20:47

0

刪除您CASE陳述的ELSE 0部分,然後記錄不匹配的CASE標準將返回NULL其被排除在聚合函數。

SELECT schoolc 
     ,COUNT(CASE WHEN (subtestc) IN('ela','Math') AND tscrtypc ='A'THEN (ident) END)AS  [total Students] 
     ,COUNT(CASE WHEN (testscore)IN('A','P') AND subtestc IN('ela','Math') AND tscrtypc ='A'THEN (ident) END)AS [students above] 
    FROM [dbo].[qw_star_testing_detail] 
    WHERE subtestc IN('ela','Math') 
    AND tscrtypc ='A' 
    GROUP BY schoolc