case when then 条件没有 else

Case when then conditions without else

我正在尝试做一些类似下面的事情,我不想在下面的条件下考虑大于 30 的数字,但是 case 条件默认采用 else 条件并将它们添加为 value_a 中的 null。

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

如果您想在第一个条件中包含 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 的小演示:DEMO 我相信即使它不在 HIVEQL

中也会有所帮助

由于您想排除 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'