首页 > 解决方案 > SQL:当 0 时过滤结果,但当列 X 不为空时除外

问题描述

可能遗漏了一些非常明显的东西,但我正在尝试在 GBQ 中过滤我的查询结果。在下面的示例中,我想过滤掉invamt为空的结果。但是,我想保留invamt为 0 但order amt不是 0的任何结果

DATA
  csr | inv amt| order amt  |  
-----------------------------
 bob  |  12,00 |     0      |
 bil  |   0    |     0      |
 art  |   0    |     0      |
 tia  |   0    |     12     |

OUTPUT
  csr | inv amt| order amt  |  
-----------------------------
 bob  |  12,00 |     0      |
 tia  |   0    |     12     |

我已经尝试过 where invamt <> 0 and not (invamt = 0 and orderamt > 0) ,但似乎没有给我正确的结果。有任何想法吗?

编辑:道歉——交替使用 NULL 和 0 结果。绝对不是一回事

标签: sqlgoogle-bigquery

解决方案


根据您的样本数据,您似乎只是想要:

where invamt <> 0 or orderamt <> 0

根据您的问题:

我想过滤掉 invamt 为空的结果。但是,我想保留 invamt 为空但 order amt 不为空的任何结果

你似乎想要:

where invamt is not null or orderamt is not null

如果NULLs 和0都是可能的,那么这就足够了:

where invamt <> 0 or orderamt <> 0 

这保证了其中一列具有非NULL-、非-0值。


推荐阅读