是否可以执行条件if语句将3个字段折叠为一个字段?我正在努力实现以下目标。 field1
,field2
和field3
是Int64
,是可空的。我找不到一种进行空值检查的方法,因此要检查是否为任何字段分配了正值,然后将field
设置为相应的值。当下面的语法出现以下错误时:
case when field1 >= 0 then 0 end as field,
case when field2 >= 0 then 1 end as field,
case when field3 >= 0 then 2 end as field
不支持结果中重复的列名。找到了 重复:字段
答案 0 :(得分:2)
这是您想要的吗?
(case when field1 is not null then 0
when field2 is not null then 1
when field3 is not null then 2
end) as null_check
或者,如果您要将其转换为编码字段:
concat(case when field1 is not null then 0 end,
case when field2 is not null then 1 end,
case when field3 is not null then 2 end,
) as null_check
这将在字符串中列出“ 0”,“ 1”,“ 2”,具体取决于非NULL
的值。
答案 1 :(得分:1)
听起来好像您只想要一个CASE
表达式,它可以基于多个条件生成多个值:
CASE WHEN field3 >= 0 THEN 2
WHEN field2 >= 0 THEN 1
WHEN field1 >= 0 THEN 0 END AS field
这里的逻辑是,在确定要生成的输出时,它将首先检查field3
,然后检查field2
,然后检查field1
。