Невозможно выполнить запрос с нулевыми значениями - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно выполнить запрос на основе параметра, используемого параметра в предложении CASE.

Параметр будет содержать следующие значения: contactSuccess, contactFail, notcontacted

У нас есть столбец: empCommunication, который является логическим,Это займет 0,1, ноль

На основе значения параметра мне нужно выполнить запрос.

Например: если параметр является contactSuccess, то где условие должно быть empCommunication = 1

если параметром является contactFail, тогда условие Where должно быть empCommunication = 0

Два вышеупомянутых сценария работают с приведенным ниже запросом, но если происходит сбой с

Параметр notContacted, в данном случае гдепункт должен быть empCommunication is NULL.

Пожалуйста, помогите мне в этом.

SELECT
        empCategory as name,
        count(*) as value
from EmployeeRecords R
WHERE empCommunication =
    CASE ?
        WHEN 'contactSuccess' THEN  1
        WHEN 'contactFail' THEN 0
        WHEN 'notcontacted' THEN  IS NULL
     END
group by empCategory

Ответы [ 3 ]

0 голосов
/ 21 мая 2019

Предположим, что вашим параметром является p_param, вы можете изменить свой запрос на

SELECT
    empCategory AS name,
    COUNT(*) AS value
FROM EmployeeRecords
WHERE 
    (empCommunication IS NULL AND p_param = 'notcontacted')
    OR (empCommunication = 1 AND p_param = 'contactSuccess')
    OR (empCommunication = 0 AND p_param = 'contactFail')
GROUP BY empCategory;
0 голосов
/ 21 мая 2019

Используйте coalesce(), чтобы охватить случай, когда параметр равен 'notcontacted' с другим значением, таким как -1:

SELECT
        empCategory as name,
        count(*) as value
from EmployeeRecords R
WHERE coalesce(empCommunication, -1) =
    CASE ?
        WHEN 'contactSuccess' THEN  1
        WHEN 'contactFail' THEN 0
        WHEN 'notcontacted' THEN -1
     END
group by empCategory
0 голосов
/ 21 мая 2019

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

SELECT
        empCategory as name,
        count(*) as value
        from EmployeeRecords R WHERE empCommunication =
(CASE a_column_in_table
        WHEN 'contactSuccess' THEN  1
        WHEN 'contactFail' THEN 0
        WHEN 'notcontacted' THEN  NULL
        else null
 END)
group by empCategory;`
...