2016-10-13 2 views
1

表1アグリゲーション上の表に

S_no Name Attempt Score Status 
1  sam 1  25 Fail 
2  sam 2  45 Pass 
3  sam 3  12 Fail 
4  Dante 1  56 Pass 
5  Dante 2  78 Pass 
6  jill 1  16 Fail 
7  Jack 1  90 Pass 

。合格者数= 2、生徒数失敗= 2

最終試行のステータスは考慮に入れられます。

私はあなたがROW_NUMBER()と条件付き集約を使用することができます

Id Passed_no failed_no 
1 2   2   

答えて

3

を表示したい:

SELECT COUNT(CASE WHEN s.status = 'Pass' THEN 1 END) as Passed_no, 
     COUNT(CASE WHEN s.status = 'Fail' THEN 1 END) as Failed_no 
FROM (
    SELECT t.*, 
      ROW_NUMBER() OVER(PARTITION BY t.name ORDER BY t.attempt DESC) as rnk 
    FROM YourTable t) s 
WHERE s.rnk = 1 
+0

RNK以外の他の任意の方法? –

+0

特別な理由はありますか? @EswarVignesh – sagi

+0

ちょうど興味深い.. .. RANK関数とフィルタを使用して...代わりに、他の方法はありますか? –

0

あなたは結果を得るためにPIVOTを使用することができます。

SELECT * 
FROM (
     SELECT NAME ,CASE SUM(CASE WHEN STATUS='Pass' THEN 0 ELSE 1 END) 
         WHEN 0 THEN 'PASS' 
         ELSE 'FAIL' 
        END STATUS 
     FROM TABLE_NAME 
     GROUP BY NAME) 
PIVOT (COUNT(NAME) FOR STATUS IN ('PASS' AS "Passed_no" ,'FAIL' AS "Failed_no")); 
関連する問題