2017-10-11 75 views
0

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

回答

2

有一个LEAST功能,但它不会忽略NULL值,所以你需要用些额外的逻辑就像

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

对于99999你应该使用比任何现有的值。 如果所有列可能是空或零,你必须添加一个最终

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

在这种情况下,返回NULL。

+0

谢谢。刚学到最少。但它会不会返回零?例如:1 2 3 0 => 0 – cs0815

+0

当然,我忘了零,添加了'NULLIF' – dnoeth

+0

行。明天再试。 – cs0815

1

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

select least(col1, col2, col3) 

这是棘手与0 S和NULL秒。你不指定类型的列,但您可以使用NULLIF()COALESCE()正数值:

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

当然,这将返回特殊值999999999如果所有值均为0NULL