4

私は以下のようなクエリ構造を持っています.CASEステートメントを使用するか、他の方法で選択クエリを1つとして記述して、値に基づいて適切な変数に値が挿入されるようにする方法があるかどうか疑問に思っています.

DECLARE passes INT;
DECLARE fails INT;
..

SELECT count(score)
INTO passes
  FROM scores
 WHERE score >= 40;

SELECT count(score)
INTO fails
  FROM scores
 WHERE score < 40;

Murdoch はこの問題に対する適切な解決策を思いつきました。私はそれに 1 つの変更を加えて、それぞれの変数にそれぞれの値を入れるだけで済みました。

SELECT * 
INTO   passes, fails 
FROM  (SELECT SUM(CASE 
                    WHEN score >= 40 THEN 1 
                    ELSE 0 
                  END) AS _passes, 
              SUM(CASE 
                    WHEN score < 40 THEN 1 
                    ELSE 0 
                  END) AS _fails 
       FROM   scores) AS x; 
4

2 に答える 2

9

これを行うには、スコアごとにケースを実行し、1または0を返します。次に、ケースに一致するインスタンスごとに1つ追加して、全体をSUM(COUNTではなく)でラップします。

SELECT 
SUM(CASE WHEN score >= 40 THEN 1 ELSE 0 END) AS passes, 
SUM(CASE WHEN score < 40 THEN 1 ELSE 0 END) AS fails 
FROM scores
于 2011-03-12T13:28:00.500 に答える
3
DECLARE tpasses INT;
DECLARE tfails INT;

SELECT 
    SUM(CASE WHEN score >= 40 THEN 1 ELSE 0 END) AS passes, 
    SUM(CASE WHEN score < 40 THEN 1 ELSE 0 END) AS fails 
INTO tpasses, tfails 
FROM scores
于 2012-05-31T18:36:32.130 に答える