使用基于其他表中的值的过滤来聚合值

时间:2015-03-23 15:04:06

标签: excel

我有两个表,即交易和账户。

事务表看起来像这样(标记的列是主键):

| ID* | Date       | Amount | Debit | Credit |
+-----+------------+--------+-------+--------+
|   1 | 03/11/2015 |   $100 | B     | A      |
|   2 | 03/12/2015 |    $50 |       | A      |
|   3 | 03/13/2015 |   $400 | C     | A      |
|   4 | 03/14/2015 |   $200 | A     |        |
|   5 | 03/14/2015 |   $150 | D     | A      |

“帐户”表格如下所示:

| Name* | Liquidity |
+-------+-----------+
| A     |         1 |
| B     |         1 |
| C     |         2 |
| D     |         3 |

我想要实现的是汇总交易表中的金额,其中Credit是流动性为k的账户名称,借方为空白或流动性为k + 1或以上的账户名称。对于上述情况,如果k = 1,结果将是50美元(第2行)+ 400美元(第3行)+ 150美元(第5行)= 600美元。

如果是SQL,那么查询将如下所示:

select sum(amount)
from transactions
where credit in (select name from accounts where liquidity = 1)
  and (debit is null or
       debit in (select name from accounts where liquidity > 1))

或者这个:

select sum(amount)
from transactions
left join accounts as c on transactions.credit = c.name
left join accounts as d on transactions.debit = d.name
where c.liquidity = 1 and (d.liquidity is null or d.liquidity > c.liquidity)

实际上我还需要按时间(特别是按月)过滤行,但我认为这很容易。

如何在Excel中执行此操作?我尝试将SUMIFS与VLOOKUP一起使用,但我无法使其工作。我有很多帐户,因此手动列出SUMIFS的所有条件都不是一种选择。

1 个答案:

答案 0 :(得分:0)

这个数组公式似乎符合要求。它以数组形式使用INDEX,并通过乘以FALSE(例如 0 )将任何不匹配的值归零。遗留的是总数。

SUM across INDEX with criteria

I9中的数组公式

=SUM(INDEX($C$2:$C$99*($E$2:$E$99=G9)*(IF($D$2:$D$99="", 1, SUMIF($G$2:$G$5, $D$2:$D$99, $H$2:$H$5)>H9)), , ))

数组公式需要使用 Ctrl + Shift + Enter↵进行最终确定。