2015-07-13 4 views
1
SELECT 
    CASE 
     WHEN FIRST_NAME = 'alina' THEN (COMMISSION*RATE/TOTAL_DAYS) 
     ELSE REWARD 
    END AS reward 
FROM testing; 

мне нужно проверить, если TOTAL_DAYS является 0 или NULL. Как я могу это сделать? Для случая NULL я могу использовать функцию ISNULL.Проверка на ноль или NULL в делителем

Но как я могу проверить оба случая 0 или NULL? В случае TOTAL_DAYS - ZERO или NULL, - TOTAL_DAYS = 1.

+0

И если это ноль или NULL, то, что вы хотите сделать? –

ответ

0

Вы можете использовать coalesce перевести null на 1, и greatest обрабатывать 0s:

SELECT CASE WHEN FIRST_NAME = 'alina' 
      THEN commission * rate/GREATEST(COALESCE(total_days, 1), 1) 
      ELSE reward END AS reward 
FROM testing; 
+0

PLZ проверить отредактированный вопрос. – user4221591

+0

@ user4221591 обновил мой ответ – Mureinik

1
select 
CASE 
    WHEN FIRST_NAME = 'alina' THEN (COMMISSION * RATE/ISNULL(NULLIF(TOTAL_DAYS, 0), 1)) 
    ELSE REWARD 
end as reward 
    from testing; 
+0

PLZ проверить отредактированный вопрос – user4221591

1

Вы можете использовать комбинацию NULLIF и ISNULL:

SELECT 
    CASE 
     WHEN FIRST_NAME = 'alina' THEN (COMMISSION * RATE/ ISNULL(NULLIF(TOTAL_DAYS, 0), 1)) 
     ELSE REWARD 
    END ASreward 
FROM testing; 

NULLIF вернет NULL, если TOTAL_DAYS - 0. Затем ISNULL вернет 1, если NULLIF возвращает NULL. Пример:

SELECT ISNULL(NULLIF(N, 0), 1) AS N 
FROM(
    VALUES (3), (NULL), (0) 
)t(N) 

Это возвращает:

N 
----------- 
3 
1 
1 
0

Пожалуйста, проверьте этот, если он работает.

 select 
    CASE 
     WHEN FIRST_NAME = 'alina' THEN CASE WHEN COALESCE(TOTAL_DAYS,0) = 0 THEN 0 ELSE (COMMISSION*RATE/TOTAL_DAYS) 
     ELSE REWARD 
    end as reward 
     from testing; 
0

Попробуйте это:

SELECT 
    CASE 
    WHEN FIRST_NAME = 'alina' THEN 
     commission * rate/COALESCE(NULLIF(total_days, 0), 1) 
    ELSE 
     reward 
    END AS reward 
FROM 
    testing; 
Смежные вопросы