忽略零和null的最少几列

时间:2017-10-11 20:20:51

标签: sql teradata

在TeraData中,是否有一种简单的方法可以选择最少的几列(即创建一个计算列),同时忽略包含零和NULL的列?

2 个答案:

答案 0 :(得分:2)

LEAST函数,但它不会忽略NULL,因此你必须应用一些额外的逻辑,比如

LEAST(COALESCE(NULLIF(col1,0), 999999)
     ,COALESCE(NULLIF(col2,0), 999999)
     ,COALESCE(NULLIF(col3,0), 999999))

对于99999,您应使用高于任何现有值的值。 如果所有列都可能为NULL或零,则必须添加最终

NULLIF(LEAST(....), 99999)

在这种情况下返回NULL。

答案 1 :(得分:1)

好吧,您可以使用least()

select least(col1, col2, col3)

这对0NULL来说很棘手。您没有指定列的类型,但您可以使用NULLIF()COALESCE()作为正数值:

select least( coalesce(nullif(col1, 0), 999999999),
              coalesce(nullif(col2, 0), 999999999),
              coalesce(nullif(col2, 0), 999999999)
            )

当然,如果所有值均为9999999990,则会返回特殊值NULL