условная оговорка в клаудере - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь получить условие if, then, работающее в cloudera - в соответствии с:

    if (appointment_purpose = '') and 
appointment_purpose2 = '') and 
appointment_type2 = '') and 
appointment_type3 = '') and 
appointment_type4 = '') and 
appointment_type5 = '') and 
discuss_other ' ') then
discuss_other = 0
else discuss_other = 1,

Как мне заставить это работать? Если бы все типы встреч и цели встреч были пустыми, затем обсудить_другое также должно быть пустым, т. Е. 0 - в противном случае обсуждения_другое должно быть 1

.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

В SQL «пустой» обычно означает NULL. Итак, мне интересно, действительно ли вы намереваетесь использовать одну из следующих конструкций:

select (case when appointment_purpose is null and
                  appointment_purpose2 is null and
                  appointment_type2 is null and
                  appointment_type3 is null and
                  appointment_type4 is null and
                  appointment_type5 is null and
                  discuss_other is null
             then 0 else 1
        end) as discuss_other

Поскольку у одного из значений есть пробел, мне интересно, хотите ли вы обрабатывать оба пробела и нулевые значения:

select (case when (appointment_purpose is null or replace(appointment_purpose, ' ', '') = '') and
                  (appointment_purpose2 is null or replace(appointment_purpose2, ' ', '') = '') and
                  (appointment_purpose3 is null or replace(appointment_purpose3, ' ', '') = '') and
                  (appointment_purpose4 is null or replace(appointment_purpose4, ' ', '') = '') and
                  (appointment_purpose5 is null or replace(appointment_purpose5, ' ', '') = '') and
                  (discuss_other is null or replace(discuss_other, ' ', '') = '')
             then 0 else 1
        end) as discuss_other

Наконец, несколько столбцов в одной таблице, которые действуют как массив, обычно являются плохим признаком. Обычно это говорит о том, что вы хотите соединительную таблицу.

0 голосов
/ 30 апреля 2018

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

SELECT (CASE WHEN appointment_purpose = '' 
AND appointment_purpose2 = ''
AND appointment_type2 = ''
AND appointment_type3 = ''
AND appointment_type4 = ''
AND appointment_type5 = ''
AND discuss_other ' '
THEN 0
ELSE 1
) as discuss_other
FROM tableName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...