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'
我正在尝试做一些类似下面的事情,我不想在下面的条件下考虑大于 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'