объединение 3 таблиц с UNION с разными столбцами - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь отобразить Месяц доходов и расходов в моем PHP CRM-скрипте. Работает на 2 таблицы. Но теперь я хочу объединить еще одну таблицу с данными о расходах. Я не понимаю, как это сделать.

Вот мой запрос для извлечения данных о доходах и расходах

SELECT
    YEAR(v.paid_date) AS Yr,
    MONTHNAME(v.paid_date) AS Month,
    SUM(IF(v.IncomeOrExpense = 'Income', v.paid_amount, 0)) AS Income,
    SUM(IF(v.IncomeOrExpense = 'Expense', v.paid_amount, 0)) AS Expense
FROM in_exp v
GROUP BY Yr, Month
ORDER BY Yr DESC, Month DESC

И я создал для этого представление:

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `in_exp`  AS  select `r`.`invoice_id` AS `invoice_id`,`r`.`customer` AS `customer`,`r`.`paid_amount` AS `paid_amount`,`r`.`paid_date` AS `paid_date`,`r`.`comments` AS `comments`,`l`.`company` AS `company`,'Income' AS `IncomeOrExpense` from (`receipt` `r` join `leads` `l` on((`r`.`customer` = `l`.`id`))) union all select `p`.`invoice_id` AS `invoice_id`,`p`.`vendor` AS `vendor`,`p`.`paid_amount` AS `paid_amount`,`p`.`paid_date` AS `paid_date`,`p`.`comments` AS `comments`,`v`.`name` AS `name`,'Expense' AS `Expense` from (`payments` `p` join `vendor` `v` on((`p`.`vendor` = `v`.`id`))) union all select `e`.`eid` AS `eid`,`e`.`user` AS `user`,`e`.`paid_amount` AS `paid_amount`,`e`.`paid_date` AS `paid_date`,`e`.`comments` AS `comments`,`u`.`firstname` AS `firstname`,'Expense' AS `Expense` from (`expense_pay` `e` join `users` `u` on((`e`.`user` = `u`.`id`))) ;

Теперь я хочу добавить SUM(IF(v.IncomeOrExpense = 'Expense', v.paid_amount, 0)) AS Expense еще с одной таблицей (расходы) Сумма, в которой указан поставщик и сумма.

Может кто-нибудь подсказать мне, как этого добиться? Я не могу изменить структуру таблицы для таблицы расходов, так как она уже связана с таким количеством запросов и таблиц.

1 Ответ

0 голосов
/ 23 марта 2020

Предполагая, что select работает правильно для третьего объединения, затем замените буквальный «расход» на что-то другое, скажем «costV», и добавьте выражение

SUM(IF(v.IncomeOrExpense = 'ExpenseV', v.paid_amount, 0)) AS Expense

к вашему запросу

...