SQL запрос для подсчета итогов - PullRequest
0 голосов
/ 15 января 2020

Я совершенно новичок в SQL запросах, поэтому, пожалуйста, go, не волнуйтесь, если то, что я сделал до сих пор, действительно странно:)

У меня есть две таблицы - A для дохода и B по расходам:

Business_ID Income_Desc Income_Amount
1           Income A    1000
1           Income B    3000
1           Income C    2000

Business_ID Expen_Amount
1           2500

Я хотел бы подготовить таблицу, в которой будут показаны каждая из сумм доходов, сумма расходов, общая сумма доходов, общая сумма расходов и общая сумма общих доходов и общих расходов. .

Примерно так, если это возможно

Business_ID Income Description  Income Amount   Expenditure Amount  Total
1           Income A            1000            2500                 -
1           Income B            3000            -                    -
1           Income C            2000            -                    -
1           All Amounts         6000            2500                  3500

Это то, что я пробовал до сих пор

SELECT a. Business_ID, COALESCE (a.Income_Desc, 'All Amounts') AS 'Income Description', SUM(a.Income_Amount) AS 'Income Amount', SUM(b.Expen_Amount) AS Expenditure Amount', (sum(a.Income_Amount)-SUM(b.Expen_Amount)) AS 'Total'
FROM Income AS a LEFT JOIN Expenditure AS b ON a.Business_ID = b. Business_ID
GROUP BY a. Business_ID,  a.Income_Desc WITH ROLLUP

В результате я получаю вот это

Business_ID Income Description  Income Amount   Expenditure Amount  Total
1           Income A            1000            2500                 -1500
1           Income B            3000            2500                 500
1           Income C            2000            2500                 -500
1           All Amounts         6000            7500                 -1500
            All Amounts         6000            7500                 -1500

Можно ли получить вывод, подобный приведенному выше? Не могли бы вы показать мне, как этого добиться (или что-то очень близкое), пожалуйста?

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Вы можете сделать подзапрос из своего исходного запроса и выбирать только те значения, для которых бизнес-идентификатор не равен нулю. Кроме того, используйте CASE WHEN для определения этих значений <0 и замените его на «-»: </p>

SELECT x.Business_ID
     , x.`Income Description`
     , x.`Income Amount`
     , x.`Expenditure Amount`
     , x.Total
FROM
(SELECT a. Business_ID
     , COALESCE (a.Income_Desc, 'All Amounts') AS 'Income Description'
     , SUM(a.Income_Amount) AS 'Income Amount'
     , SUM(b.Expen_Amount) AS 'Expenditure Amount'
     , CASE WHEN (sum(a.Income_Amount)-SUM(b.Expen_Amount)) < 0
       THEN '-'
       ELSE (sum(a.Income_Amount)-SUM(b.Expen_Amount))
       END AS 'Total'
FROM Income AS a 
    LEFT JOIN Expenditure AS b ON a.Business_ID = b.Business_ID
WHERE a.Business_ID is not null and b.Business_ID is not null
GROUP BY a.Business_ID, a.Income_Desc WITH ROLLUP) as x
where x.Business_ID is not null

DB Fiddle

0 голосов
/ 15 января 2020

Вы можете использовать row_number() для join:

with ie as (
      select i.business_id, i.income_desc, i.income_amount,
             e.expen_amount
      from (select i.*,
                   row_number() over (partition by business_id order by income_desc) as seqnum
            from income i
           ) i left join
           (select e.*,
                   row_number() over (partition by business_id order by expen_amount) as seqnum
            from expenditure e
           ) e
           on i.business_id = e.business_id and i.seqnum = e.seqnum
       )
select ie.*
from ie
union all
select business_id, 'Total', sum(income_amount), sum(expen_amount)
from ie
group by business_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...