我的DB2 SQL要求我报告一组值,如果它们不同的话。 例如:
Current Assessment Previous Assessment
20 25
19 19
30 32
30 _________
以上返回第1行和第3行。显然不是第2行。但是我还需要它返回第4行......但是因为它与Null相比它并没有返回它。
如何解决这个问题?
答案 0 :(得分:1)
可以使用IS NULL
& OR
条件
代码
Where ( ("Current Assessment" <> "Previous Assessment")
OR ("Current Assessment" IS NULL)
OR ("Previous Assessment" IS NULL)
)
答案 1 :(得分:1)
您可以使用以下内容。合并将确保它仅比较不同的值。如果两个值都为null,那么查询将把它们视为匹配
WHERE COALESCE(current_assessment, <value>) <>
COALESCE(previous_assessment, <value>) ;
请注意,值应该是一个非发生值,由一个非常低的负数来预测,如-999999
答案 2 :(得分:0)
如果比较数值
WHERE COALESCE(current_assessment, previous_assessment +1, 0) <>
COALESCE(previous_assessment, current_assessment +1, 0) ;
如果你比较chararcteres值
WHERE COALESCE(current_assessment, previous_assessment || 'X', '') <>
COALESCE(previous_assessment, current_assessment || 'X', '') ;
使用此方法,null = null并且无需为coalesce选择任意值。
否则,如果您确定您的列不包含一个XVALUE,则可以执行此操作:
WHERE ifnull(current_assessment, XVALUE) <> ifnull(previous_assessment, XVALUE);
最好的方法是
Where current_assessment<>previous_assessment or (current_assessment is null and previous_assessment is not null) or (current_assessment is not null and previous_assessment is null)