Sql Oracle条件为仅拉动';0';价值观
我需要为A列和B列提取只有0个值的ID。例如:Sql Oracle条件为仅拉动';0';价值观,sql,oracle,Sql,Oracle,我需要为A列和B列提取只有0个值的ID。例如: +----+------+------+ | ID | A | B | +----+------+------+ | 1 | null | 123 | | 2 | 23 | 768 | | 3 | 0 | 0 | | 4 | 96 | 0 | | 5 | 0 | null | | 6 | 0 | 0 | +----+------+------+
+----+------+------+
| ID | A | B |
+----+------+------+
| 1 | null | 123 |
| 2 | 23 | 768 |
| 3 | 0 | 0 |
| 4 | 96 | 0 |
| 5 | 0 | null |
| 6 | 0 | 0 |
+----+------+------+
我已经尝试了几个查询,但仍然在处理0以上的值。由于表中有空值,我使用NVL(expr1,0)语法将空值替换为0:
+----+------+------+
| ID | A | B |
+----+------+------+
| 1 | 0 | 123 |
| 2 | 23 | 768 |
| 3 | 0 | 0 |
| 4 | 96 | 0 |
| 5 | 0 | 0 |
| 6 | 0 | 0 |
+----+------+------+
我在WHERE子句中使用了以下内容,并得到以下结果:
Where status = 'OPEN'
AND a.value IS NULL OR a.value = '0'
AND b.value IS NULL OR b.value = '0'
Output:
+----+----+-----+
| ID | A | B |
+----+----+-----+
| 1 | 0 | 123 |
| 3 | 0 | 0 |
| 5 | 0 | 0 |
| 6 | 0 | 0 |
+----+----+-----+
似乎我只为A拉取了0个值,但B的值仍然大于0。我只需要为A和B拉取值均为0的ID。我想您只需要括号:
Where status = 'OPEN' AND
(a.value IS NULL OR a.value = 0) AND
(b.value IS NULL OR b.value = 0)
我喜欢戈登的答案,但为了简洁起见,我会在这里使用
COALESCE
:
SELECT *
...
WHERE
status = 'OPEN' AND
COALESCE(a.value, 0) = 0 AND
COALESCE(b.value, 0) = 0;
我们也可以用总和表示:
WHERE
status = 'OPEN' AND
COALESCE(a.value, 0) + COALESCE(b.value, 0) = 0;