Объединение / консолидация строк (агрегирование сумм) на основе таблицы консолидации - PullRequest
0 голосов
/ 17 сентября 2018

Приложение 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 со всеми нужными мне записями.Таким образом, другим решением было бы объединить значения из массива, но сохранить статические идентификаторы и имена при суммировании суммы счета.

Я просто хочу начать на правильном пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...