首页 > 解决方案 > 如何根据列值过滤结果

问题描述

我的查询中有这个结果集。

+-------------+-------------+-----------+----------+------------------+---------------+----------------+
| Branch Name |  Client ID  |   Name    |  Loans   | Savings Deposits | Time Deposits | Share Capital  |
+-------------+-------------+-----------+----------+------------------+---------------+----------------+
| Main Office | 01-029203-1 | Doe, John |     0.00 |             0.00 |          0.00 |           0.00 |
| Main Office | 01-012314-1 | Doe, John | 51200.75 |            61.26 |      15000.00 |           0.00 |
| Main Office | 01-929828-3 | Doe, Jane |  3000.00 |             0.00 |       8000.00 |           0.00 |
| Main Office | 01-992830-4 | Doe, Jane |  5240.44 |            46.00 |       2000.00 |           0.00 |
+-------------+-------------+-----------+----------+------------------+---------------+----------------+

我想过滤掉某个客户名称的其中一个客户 ID(例如:Doe,John,客户 ID 为 01-029203-1)在所有 4 个账户(贷款、储蓄存款、定期存款和股票)上的余额为 0 Capital),该客户的所有实例将不包括在内。

像这样:

+-------------+-------------+-----------+----------+------------------+---------------+----------------+
| Branch Name |  Client ID  |   Name    |  Loans   | Savings Deposits | Time Deposits | Share Capital  |
+-------------+-------------+-----------+----------+------------------+---------------+----------------+
| Main Office | 01-929828-3 | Doe, Jane |  3000.00 |             0.00 |       8000.00 |           0.00 |
| Main Office | 01-992830-4 | Doe, Jane |  5240.44 |            46.00 |       2000.00 |           0.00 |
+-------------+-------------+-----------+----------+------------------+---------------+----------------+

我已经尝试过使用whereandhaving子句,但我不知道如何。

标签: mysql

解决方案


一种选择,使用四列的总和:

SELECT *
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM yourTable WHERE t1.Name = t2.Name AND
                  Loans + `Savings Deposits` + `Time Deposits` + `Share Capital` = 0);

该答案通过搜索每条记录是否可以找到任何具有相同名称且所有帐户总和为零的记录来起作用。如果是,则该名称无效,并且所有此类名称记录都不会出现在结果集中。


推荐阅读