Oracle中基于多列的记录过滤

ee7vknir  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(173)

我需要过滤满足以下条件的特定记录集
任何记录的帐户为“N/A”和金额为0,则应过滤该记录。
这里的问题是,有一些记录的帐户为“N/A”,但金额不为0,这些记录不应该被过滤掉。
输入

  1. Id account amount
  2. 1 ABC 5
  3. 1 N/A 0
  4. 2 PQR 6
  5. 2 N/A 0
  6. 3 N/A 8
  7. 4 N/A 9

输出

  1. Id account amount
  2. 1 ABC 5
  3. 2 PQR 6
  4. 3 N/A 8
  5. 4 N/A 9

有没有人可以帮助这个正确的过滤条件?

7y4bm7vi

7y4bm7vi1#

account = 'N/A' AND amount = 0将匹配您要筛选出的行。假设这两列都不包含NULL值(您的示例数据不包含),那么您可以使用NOT (account = 'N/A' AND amount = 0)反转该过滤器以查找您想要保留的所有行:

  1. SELECT *
  2. FROM table_name
  3. WHERE NOT (account = 'N/A' AND amount = 0);

如果你的列可以有NULL值,并且你想保留它们,那么你可以用途:

  1. SELECT *
  2. FROM table_name
  3. WHERE NOT (account = 'N/A' AND amount = 0)
  4. OR account IS NULL
  5. OR amount IS NULL;

其中,对于样本数据:

  1. CREATE TABLE table_name (id, account, amount) AS
  2. SELECT 1, 'ABC', 5 FROM DUAL UNION ALL
  3. SELECT 1, 'N/A', 0 FROM DUAL UNION ALL
  4. SELECT 2, 'PQR', 6 FROM DUAL UNION ALL
  5. SELECT 2, 'N/A', 0 FROM DUAL UNION ALL
  6. SELECT 3, 'N/A', 8 FROM DUAL UNION ALL
  7. SELECT 4, 'N/A', 9 FROM DUAL

两个输出:
| ID|账户|量|
| --|--|--|
| 1 |ABC| 5 |
| 2 |PQR| 6 |
| 3 |N/A| 8 |
| 4 |N/A| 9 |
fiddle

展开查看全部
slhcrj9b

slhcrj9b2#

一种选择是-对于您发布的示例数据-

  1. SQL> with test (id, account, amount) as
  2. 2 (select 1, 'ABC', 5 from dual union all
  3. 3 select 1, 'N/A', 0 from dual union all
  4. 4 select 2, 'PQR', 6 from dual union all
  5. 5 select 2, 'N/A', 0 from dual union all
  6. 6 select 3, 'N/A', 8 from dual union all
  7. 7 select 4, 'N/A', 9 from dual
  8. 8 )

查询方式:

  1. 9 select *
  2. 10 from test
  3. 11 where account <> 'N/A'
  4. 12 or amount <> 0;
  5. ID ACCOUNT AMOUNT
  6. ---------- -------- ----------
  7. 1 ABC 5
  8. 2 PQR 6
  9. 3 N/A 8
  10. 4 N/A 9
  11. SQL>
展开查看全部

相关问题