Случай, когда тогда условия без другого

#sql #hive #case #hiveql

Вопрос:

я пытаюсь сделать что-то вроде ниже, где я не хочу рассматривать числа, которые больше 30 в приведенном ниже условии, но условие case по умолчанию принимает условие else и добавляет их как null в value_a.

 CASE WHEN a<10 and a!=0
               THEN
               a
                WHEN a>10 and a<30
                THEN
                b
            END AS value_a
 

выход, как показано ниже

 value_a
 a
 b
 null
 

где, как я хочу, чтобы он учитывал значения только до 30 и игнорировал другие числа
, и вывод был похож

 value_a
a
b
 

Комментарии:

1. Вам нужно <= 30 условие в предложении WHERE.

2. это связано с тем, что у вас есть значение a, которое не соответствует этому условию, что делать, если a >= 30

3. я хочу, чтобы он не рассматривал числа, превышающие 30, и игнорировал их

4. Ваше выражение case всегда будет возвращать что-то, либо указанное значение. или НОЛЬ. Если вам не нужно значение NULL, не выбирайте эту строку. Т. Е. используйте условие предложения WHERE, чтобы пропустить >= 30 строк.

5. @user3495160 проверьте решение ниже, вам нужно, где в качестве фильтра

Ответ №1:

Поскольку вы хотите исключить результаты, где a >= 30, затем используйте предложение where для фильтрации этих результатов. И если вам нужно, чтобы a было равно 10, то вам не хватает знака равенства (скорректировано ниже).

 SELECT *,

CASE WHEN a<=10 and a!=0 THEN a
     WHEN a>10 and a<30 THEN b
            END AS value_a
 

код 2

 select *,
case when transaction_type = 'c' and date < [enter date] THEN A
     when transaction_type = 'c' and date > [enter date] THEN B
    else end as final_value
    FROM [table name] 
    WHERE transaction_type != 'd'
 

Комментарии:

1. у меня есть транзакции tran=C и tran=D.. я хочу применять условия только в кредит, например…… (случай, когда tran= » C «и дата<20, затем A, когда tran=» C «и дата >20, затем B )и игнорировать все траны с «D»

2. @user3495160 используйте второй код сверху, вам просто нужно будет добавить свои условия даты , а также вы не указали, что бы вы хотели делать, если data = 20, вы можете настроить случай, когда есть

Ответ №2:

Вам нужно будет добавить»=», если вы хотите включить 10 в свое первое условие. Вам также нужно будет добавить»=», если вы хотите включить 30 во второе условие.

В конце вам придется сказать, что вы не хотите обрабатывать, если он больше 30.

 select CASE WHEN id<=10 and id>=0 THEN
            'a'
            WHEN id > 10 and id<=30 THEN
            'b'
            END value_a
from A
where id <= 30
 

Вот небольшая демонстрация для SQLServer: ДЕМОНСТРАЦИЯ
Я верю, что это поможет, даже если этого нет в HIVEQL

Комментарии:

1. у меня есть транзакции tran=C и tran=D.. я хочу применять условия только в кредит, например…… (случай, когда tran= » C «и дата<20, затем A, когда tran=» C «и дата >20, затем B )и игнорировать все траны с «D»

2. Вы можете применить все, что я ответил вам выше. Вы добавляете это : выберите случай, когда тран= » C «и дата<20, затем A, когда тран=» C » и дата >=20, затем B конечное значение a из ВАШЕЙ таблицы, где тран<20, затем A, когда тран=»C» и дата ><>D