SQL показывает сводку после каждого изменения значения столбца - PullRequest
1 голос
/ 21 мая 2019

У меня есть данные о продажах по филиалам. Я хочу SQL, который даст мне сводные данные о продажах для каждого BranchId, как показано ниже, конечно, BranchId (s) огромны, поэтому я должен сделать его динамическим (я не могу использовать Union). Я застрял, как добавить итоговую строку после каждого изменения ветви динамически.

+ ---------+--------+---------+-----------+
| BranchId | CashIn | CashOut | CardSales |
+ ---------+--------+---------+-----------+
| 1        |   1000 |     500 |        50 |
| 1        |    500 |    2500 |       100 |
| 1        |   1000 |     200 |       200 |
| Totals   |   2500 |    3200 |       350 |
| 5        |    100 |     500 |       500 |
| Totals   |    100 |     500 |       500 |
| 7        |    100 |     100 |       100 |
| 7        |    200 |     300 |       400 |
| Totals   |    300 |     400 |       500 |
+ ---------+--------+---------+-----------+

1 Ответ

1 голос
/ 21 мая 2019

Метод грубой силы состоит в том, чтобы выполнить агрегацию и затем чередовать результаты:

select (case when is_base = 1 then to_char(BranchId)
             else replace('Total ([BranchId])', '[BranchId]', BranchId)
        end) as BranchId, CashIn, CashOut, CardSales
from ((select BranchId, CashIn, CashOut, CardSales, 1 as is_base
       from t
      ) union all
      (select BranchId, sum(CashIn), sum(CashOut), sum(CardSales), 0 as is_base
       from t
       group by BranchId
      )
     ) t
order by t.BranchId, is_base desc;

Здесь - это дБ <> скрипка.

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