Как использовать оператор case в моем запросе, чтобы в случае «NULL» или 0 я заменил их на 1 - PullRequest
0 голосов
/ 25 июня 2019

У меня есть запрос, и я хочу сделать запрос в форме, чтобы в случае «null» или 0 я мог заменить их на 1.

select 
ZEROIFNULL(SUM(CASE WHEN PROCEDURE_TYPE IN (816) and RAT_TYPE_NAME = '2G' THEN (COUNTER_THROUGHPUT_UL) END)) AS COUNTER_THROUGHPUT_UL_2G,
ZEROIFNULL(SUM(CASE WHEN PROCEDURE_TYPE IN (816) and RAT_TYPE_NAME = '3G' THEN (COUNTER_THROUGHPUT_UL) END)) AS COUNTER_THROUGHPUT_UL_3G,
ZEROIFNULL(SUM(CASE WHEN PROCEDURE_TYPE IN (816) and RAT_TYPE_NAME IN ('4G', 'LTE') THEN (COUNTER_THROUGHPUT_UL) END)) AS COUNTER_THROUGHPUT_UL_4G
from Table_name;

В этом запросе выше, возможно,возможно, что результат всех столбцов будет нулевым или нулевым, и мне нужно заменить их на 1. Я использовал zeroifnull для преобразования всех нулей в 0, но не могу найти способ конвертировать 0 в 1.

Я хочу видеть все три столбца как 1.

1 Ответ

0 голосов
/ 25 июня 2019

Вы можете использовать COALESCE() в большинстве баз данных:

select COALESCE(SUM(CASE WHEN PROCEDURE_TYPE IN (816) and RAT_TYPE_NAME = '2G' THEN (COUNTER_THROUGHPUT_UL) END), 1) AS COUNTER_THROUGHPUT_UL_2G,
       COALESCE(SUM(CASE WHEN PROCEDURE_TYPE IN (816) and RAT_TYPE_NAME = '3G' THEN (COUNTER_THROUGHPUT_UL) END), 1) AS COUNTER_THROUGHPUT_UL_3G,
       COALESCE(SUM(CASE WHEN PROCEDURE_TYPE IN (816) and RAT_TYPE_NAME IN ('4G', 'LTE') THEN (COUNTER_THROUGHPUT_UL) END), 1) AS COUNTER_THROUGHPUT_UL_4G
from Table_name;

Я бы также упростил запрос, перенеся общие условия в предложение WHERE:

select COALESCE(SUM(CASE WHEN RAT_TYPE_NAME = '2G' THEN COUNTER_THROUGHPUT_UL END), 1) AS COUNTER_THROUGHPUT_UL_2G,
       COALESCE(SUM(CASE WHEN RAT_TYPE_NAME = '3G' THEN COUNTER_THROUGHPUT_UL END), 1) AS COUNTER_THROUGHPUT_UL_3G,
       COALESCE(SUM(CASE WHEN RAT_TYPE_NAME IN ('4G', 'LTE') THEN COUNTER_THROUGHPUT_UL END), 1) AS COUNTER_THROUGHPUT_UL_4G
from Table_name
where PROCEDURE_TYPE IN (816);
...