带有Postgresql数据库的Ruby on Rails应用程序 我正在寻找一种合并行的方法(将一行包含一些默认值加到一行下)。让我详细解释一下。
我有一个具有此架构的客户表
|id| |client_code| |first_name| |last_name|
1 001 John Smith
2 002 Joe Blow
3 003 Someone Else
4 004 Another Client
我有一个具有此模式的账单表
|id| |client_id| |client_code| | yr | |mo| |base_fee| |other_fees| |taxes|
1 1 001 2018 1 150.00 100.00 10.00
2 2 002 2018 1 200.00 550.00 12.00
3 3 003 2018 1 275.00 300.00 11.00
4 4 004 2018 1 325.00 175.00 9.00
5 1 001 2018 2 300.15 225.50 8.00
6 2 002 2018 2 155.00 295.00 11.00
因此,基本上,每个客户每年/每月都有一张账单,其中包含基本费用,其他费用和税款。
我们有几份报告,显示了根据日期范围或所有已付账单或平均账单金额的摘要按年/月订购的客户账单。
例如,客户根据日期范围从01/01/2018到2018/12/31订购的客户账单将显示
| id | | Name | |Year| |Month| |Billed|
001 John Smith 2018 1 260.00
001 John Smith 2018 2 533.65
002 Joe Blow 2018 1 762.00
002 Joe Blow 2018 2 461.00
003 Someone Else 2018 1 586.00
004 Another Client 2018 1 509.00
在同一日期范围内支付的帐单摘要为
| id | | Name | |Billed|
001 John Smith 793.65
002 Joe Blow 1223.00
003 Someone Else 586.00
004 Another Client 509.00
现在,我们面临的新变化是约翰·史密斯(John Smith)购买乔·布鲁(Joe Blow)的执业方式。
在数据库中,我们希望将客户表中的客户002重命名为John Smith的第二种做法,但我们也希望将客户001和客户002的账单分开,并继续将它们分开,因为它们是两种不同的做法。但是,当我们提取报告时,我们希望有一个可以合并客户的选项,以便将客户001和客户002的账单全部显示在客户001(或客户002,具体取决于哪个被选为“主要”客户)下。
我当时正在考虑创建一个看起来像这样的合并表
|id| |main_client| |client_code1| |client_code2|
1 001 001 002
但这只会容纳一个客户购买另一个客户,所以我认为最好有一个consolidation / consolidation_detail模式
|id| |report_as|
1 001
|id| |consolidation_id| |client_id|
1 1 001
2 1 002
作为参考,合并报告如下所示
| id | | Name | |Year| |Month| |Billed|
001 John Smith 2018 1 1022.00
001 John Smith 2018 2 994.65
003 Someone Else 2018 1 586.00
004 Another Client 2018 1 509.00
付款帐单的摘要如下所示:
| id | | Name | |Billed|
001 John Smith 2016.65
003 Someone Else 586.00
004 Another Client 509.00
无论是作为基于SQL的解决方案还是基于Ruby / Rails的解决方案,我都在做出决定。
我已经有了使用ActiveRecord的模型方法,该方法使用ActiveRecord从加入客户表的票据表中获取所需的信息,以获取名称等。我只是不知道如何添加合并表以汇总票据值,并根据合并表中指定的客户端对它们进行分组(并使所有没有合并的其他客户端正常运行)。
在控制器中,模型方法返回一个ActiveRecord关系数组,其中包含我需要的所有记录。因此,另一种解决方案是合并数组中的值,但保持ID和名称为静态,同时增加计费金额。
我只是想开始正确的道路。