0

我正在尝试生成一份报告以显示会计交易历史记录。在大多数情况下,它是AccountingTransaction表中每条记录一个显示行。但有时我希望将某些交易作为一项交易显示给最终用户,而这些交易在幕后实际上是两项会计交易。这是由于该应用程序是一个基金会计应用程序,因此收入延迟和资金拆分造成的。

如果我一一显示所有行,这些重复条目对用户来说看起来很奇怪,因为资金拆分和延期是“幕后”。所以我想将所有相关的事务汇总到屏幕上的一个显示行中。

我的查询现在使用 group by 对相关事务进行分组

@history = AccountingTransaction.where("customer_id in (?) AND no_download <> 1", customers_in_account).group(:transaction_type_id, :reference_id).order(:created_at)

当我循环遍历时,我可以根据需要对交易进行分组,但我正在努力解决如何显示组中所有记录的“信用”字段的总和。(它只显示该组的第一条记录的信用)如果我在.sum(:credit)我的查询中添加一个,当然,它会返回我想要的总和,而不是所有其他数据。

有没有办法让我像在我的@history查询中那样对这些记录进行分组,并获得每个组的信用字段的总和?

* 加法* 我真正想要的是下面的 SQL 查询会给我什么。

    SELECT transaction_type_id, reference_id, sum(credit) 
WHERE customer_id in (21,22,23,24) AND no_download <> 1 
GROUP BY reference_id, transaction_type_id ORDER BY created_at
4

1 回答 1

1

我不确定您是否可以执行“ORDER BY created_at”而不是将其包含在选择字段中,但这是一个示例。

@history = AccountingTransaction.
  select([:reference_id, :transaction_type_id, :created_at]).
  select(AccountingTransaction.arel_table[:credit].sum.as("credit_sum")).
  where("customer_id in (?) AND no_download <> 1", customers_in_account).
  group(:transaction_type_id, :reference_id).
  order(:created_at)

要访问 credit_sum 你可以这样做:

@history[0].attributes["credit_sum"]

我想如果你愿意,你可以创建一个方法:

def credit_sum
  attributes["credit_sum"]
end
  • 编辑 *

如评论中所述,您可以直接访问该属性:

@history[0].credit_sum
于 2013-10-02T18:01:01.360 回答