我正在尝试生成一个到会计交易历史屏幕的报告。在大多数情况下,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
答案 0 :(得分: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