#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