Sql 忽略零和null的多个列的最小值
在TeraData中,是否有一种简单的方法可以在忽略包含零和空的列的同时选择多个列中的最小值(即创建计算列)?有一个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或零,则必须
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。我明天试试。