Есть ли способ, чтобы CASE оператор в SQL удовлетворял более чем двум условиям? Если нет, какова альтернатива? - PullRequest
0 голосов
/ 18 октября 2019

Логика для порогов следующая:

High (key=100) and have a score >= 100; 
Medium (key=100 and score >= 150) AND (key=101 and score < 100);    
All other scores are low**  

Текущий код, который не возвращает правильные результаты

case when a.SCORE_TYPE_KEY = '100' and a.SCORE_NBR >= 100 then 'High'
when (a.SCORE_TYPE_KEY = '100' and a.SCORE_NBR >= 150) AND (a.SCORE_TYPE_KEY = '101' and a.SCORE_NBR < 100) then 'Medium'
else 'Low' END AS Thresholds

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Полагаю, ваше утверждение дела должно быть улучшено как -

case when (a.SCORE_TYPE_KEY = '100' and a.SCORE_NBR >= 150)
          OR (a.SCORE_TYPE_KEY = '101' and a.SCORE_NBR < 100) THEN 'Medium'
     when a.SCORE_TYPE_KEY = '100' and a.SCORE_NBR >= 100 THEN 'High'
     ELSE 'Low'
END AS Thresholds
1 голос
/ 18 октября 2019

вы должны использовать ИЛИ для среднего

, case  when a.SCORE_TYPE_KEY = '100' and a.SCORE_NBR >= 100 then 'High'
       when ( (a.SCORE_TYPE_KEY ='100' and a.SCORE_NBR>= 150 ) 
              OR ( a.SCORE_TYPE_KEY='101' and a.SCORE_NBR< 100) ) then 'Medium'              
          else 'Low' END AS Thresholds

Один и тот же столбец не может иметь два разных значения в строке

...