2017-08-24 9 views
0

私は、以下のSQLサーバで実行される簡単なケース式を持っています。私は、結果がHRSが12以上、HRSが25以上、HRSが45以上などであることを期待していました。しかし、私の結果は12 HRS以上12 HRSしか返しません。誰かが私を啓発してくれますか。あなたは間違った方法での例を命じたのでSQLでのケース式

おかげで、 ジョー

SELECT 
STORE, 
CASE 
WHEN HOURS >12 THEN 'Over 12 HRS' 
WHEN HOURS >25 THEN 'Over 25 HRS' 
WHEN HOURS >45 THEN 'Over 45 HRS' 
WHEN HOURS >55 THEN 'Over 55 HRS' 
WHEN HOURS >75 THEN 'Over 75 HRS' 
WHEN HOURS >94 THEN 'Over 94 HRS' 
ELSE    'Less 12 HRS' 
END    AS HOURS, 
COUNT (ID)   AS PRD 

FROM 
(
    SELECT 
    ID, 
    STORE, 
    HOURS 
    FROM TABLE A 
)X 
GROUP BY STORE, 
CASE 
WHEN HOURS >12 THEN 'Over 12 HRS' 
WHEN HOURS >25 THEN 'Over 25 HRS' 
WHEN HOURS >45 THEN 'Over 45 HRS' 
WHEN HOURS >55 THEN 'Over 55 HRS' 
WHEN HOURS >75 THEN 'Over 75 HRS' 
WHEN HOURS >94 THEN 'Over 94 HRS' 
ELSE    'Less 12 HRS' 
END 
+0

それは短絡(免責事項:ほとんどの時間)ためです。最初の「真の」状態を評価すると、それは停止します。だから、あなたの '時代 'の時代を変えてみてください(時> 94時...時> 75 ....' – Lamak

答えて

0

はこれが起こる:HOURS >94がtrueの場合、HOURS >12も、真でなければならないので、HOURS >94HOURS >12の前に来なければなりません。

一般に、条件は強く弱い順に並べる必要があります。

逆の方法がこの問題を修正するリストを並べ替え:ので13時間ように23時間と同様に、最初の条件を満たし、そして75時間、

CASE 
WHEN HOURS >94 THEN 'Over 94 HRS' 
WHEN HOURS >75 THEN 'Over 75 HRS' 
WHEN HOURS >55 THEN 'Over 55 HRS' 
WHEN HOURS >45 THEN 'Over 45 HRS' 
WHEN HOURS >25 THEN 'Over 25 HRS' 
WHEN HOURS >12 THEN 'Over 12 HRS' 
ELSE    'Less 12 HRS' 
END AS HOURS 
+1

ありがとうございました。 – joe

0

最初の一致する行でcase停止。

ロジックを逆にする必要があります。簡単な方法の1つは、比較順序を逆にすることです。

(CASE WHEN HOURS <= 12 THEN 'Less 12 HRS' 
     WHEN HOURS <= 25 THEN 'Over 12 HRS' 
     WHEN HOURS <= 45 THEN 'Over 25 HRS' 
     WHEN HOURS <= 55 THEN 'Over 45 HRS' 
     WHEN HOURS <= 75 THEN 'Over 55 HRS' 
     WHEN HOURS <= 94 THEN 'Over 75 HRS' 
     ELSE 'Over 94 HRS' 
END) AS HOURS, 

また、グループの名前を変更することをお勧めします。以下のような何か:

(CASE WHEN HOURS <= 12 THEN '00-12 HRS' 
     WHEN HOURS <= 25 THEN '12-25 HRS' 
     WHEN HOURS <= 45 THEN '25-45 HRS' 
     WHEN HOURS <= 55 THEN '45-55 HRS' 
     WHEN HOURS <= 75 THEN '55-75 HRS' 
     WHEN HOURS <= 94 THEN '75-94 HRS' 
     ELSE '94+ HRS' 
END) AS HOURS, 
0

25、45、55、75、および第一条件のチェック一致するように、94が全て12よりも大きく、かつ任意のさらなる評価する必要はありません。あなたはこのように書く:

CASE 
    WHEN HOURS >94 THEN 'Over 94 HRS' 
    WHEN HOURS >75 THEN 'Over 75 HRS' 
    WHEN HOURS >55 THEN 'Over 55 HRS' 
    WHEN HOURS >45 THEN 'Over 45 HRS' 
    WHEN HOURS >25 THEN 'Over 25 HRS' 
    WHEN HOURS >12 THEN 'Over 12 HRS' 
ELSE     'Less 12 HRS' 
END