Sql 忽略零和null的多个列的最小值

Sql 忽略零和null的多个列的最小值,sql,teradata,Sql,Teradata,在TeraData中,是否有一种简单的方法可以在忽略包含零和空的列的同时选择多个列中的最小值(即创建计算列)?有一个LEAST函数,但它不忽略空值,因此您必须应用一些附加逻辑,如 LEAST(COALESCE(NULLIF(col1,0), 999999) ,COALESCE(NULLIF(col2,0), 999999) ,COALESCE(NULLIF(col3,0), 999999)) 对于99999,应使用高于任何现有值的值。 如果所有列都可能为NULL或零,则必须

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

有一个
LEAST
函数,但它不忽略空值,因此您必须应用一些附加逻辑,如

LEAST(COALESCE(NULLIF(col1,0), 999999)
     ,COALESCE(NULLIF(col2,0), 999999)
     ,COALESCE(NULLIF(col3,0), 999999))
对于
99999
,应使用高于任何现有值的值。 如果所有列都可能为NULL或零,则必须添加一个final

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

在这种情况下返回NULL。

有一个
函数,但它不忽略NULL,因此您必须应用一些额外的逻辑,如

LEAST(COALESCE(NULLIF(col1,0), 999999)
     ,COALESCE(NULLIF(col2,0), 999999)
     ,COALESCE(NULLIF(col3,0), 999999))
对于
99999
,应使用高于任何现有值的值。 如果所有列都可能为NULL或零,则必须添加一个final

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

在这种情况下返回NULL。

那么,您可以使用
least()

这对于
0
s和
NULL
s是很棘手的。您不指定列的类型,但可以使用
NULLIF()
COALESCE()
来表示正数值:

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

当然,这将返回特殊值
9999999
如果所有值都是
0
NULL

那么,您可以排序使用
least()

这对于
0
s和
NULL
s是很棘手的。您不指定列的类型,但可以使用
NULLIF()
COALESCE()
来表示正数值:

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

当然,如果所有值都是
0
NULL
,则返回特殊值
99999999
,谢谢。我只学到了最起码的东西。但它不会返回零吗?示例:1 2 3 0=>0当然,我忘记了零,添加了
NULLIF
OK ta。我明天试试。谢谢。我只学到了最起码的东西。但它不会返回零吗?示例:1 2 3 0=>0当然,我忘记了零,添加了
NULLIF
OK ta。我明天试试。