Приложение Ruby on Rails с базой данных Postgresql Я ищу способ объединения строк (добавление нескольких столбцов в одну строку с некоторыми значениями по умолчанию).Позвольте мне объяснить более подробно.
У меня есть таблица клиентов с этой схемой
|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.08 по 31.12.2008, будут показывать
| 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
Теперь новый поворот, с которым мы столкнулись, - это когда Джон Смит покупает практику Джо Блоу.
В базе данных мы хотим переименовать клиента 002 в клиентской таблице как вторую практику Джона Смита, но мы также хотим, чтобы счета для клиента 001 и клиента 002 разделились и продолжаем держать их раздельными в дальнейшем, поскольку онидве отдельные практики.Однако при получении отчетов нам нужен вариант, в котором мы можем объединить клиентов, чтобы все счета для клиента 001 и клиента 002 отображались под клиентом 001 (или клиентом 002, в зависимости от того, какой из них выбран в качестве «основного» клиента),
Я думал о создании таблицы консолидации, которая бы выглядела следующим образом
|id| |main_client| |client_code1| |client_code2|
1 001 001 002
Но это позволит разместить только одного клиента, покупающего другого, поэтому я думаю, что было бы лучше иметь консолидацию /схема консолидации_детали
|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 со всеми нужными мне записями.Таким образом, другим решением было бы объединить значения из массива, но сохранить статические идентификаторы и имена при суммировании суммы счета.
Я просто хочу начать на правильном пути.