Как получить две суммы из двух таблиц в одном выводе? - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть две таблицы:

  • Receive_Amount_Details за сумму кредита от владельца строительной площадки и
  • SitewiseEmployee за списание суммы с работника.

Для каждого Date, который присутствует в обеих таблицах, я хочу:

  • сумма всех Amount_Received из Receive_Amount_Details как Total_Receive_Amount_from_siteowner и
  • сумма всех Amount от SitewiseEmployee как Total_Amount_Payed_to_Labour столбец в выходной таблице.

Обе таблицы имеют столбец Date, но я хочу один столбец Date в выводе.

Если какая-либо сумма за один день не получена и рабочая сила была оплачена, она должна быть в выходной таблице, а также, если какая-либо сумма за один день была получена, но не оплачена за рабочую силу, то она также должна присутствовать в выходной таблице. .

CREATE TABLE `Receive_Amount_Details` (
    `Id` int(10) NOT NULL AUTO_INCREMENT,
    `SiteId` int(5) NOT NULL,
    `Amount_Received` int(10) NOT NULL,
    `Date` date NOT NULL,
    PRIMARY KEY (`Id`),
    KEY `SiteId` (`SiteId`),
    CONSTRAINT `Receive_Amount_Details_ibfk_1` FOREIGN KEY (`SiteId`) 
        REFERENCES `SiteList` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

и

CREATE TABLE `SitewiseEmployee` (
    `Id` int(10) NOT NULL AUTO_INCREMENT,
    `SiteId` int(5) NOT NULL,
    `EmployeeId` int(10) NOT NULL,
    `Amount` varchar(10) DEFAULT NULL,
    `Date` date NOT NULL,
    PRIMARY KEY (`Id`),
    KEY `SiteId` (`SiteId`),
    KEY `EmployeeId` (`EmployeeId`),
    CONSTRAINT `SitewiseEmployee_ibfk_1` FOREIGN KEY (`SiteId`) 
        REFERENCES `SiteList` (`Id`),
    CONSTRAINT `SitewiseEmployee_ibfk_2` FOREIGN KEY (`EmployeeId`)
        REFERENCES `Employee` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1

1 Ответ

0 голосов
/ 29 апреля 2019

Предполагая, что в одной таблице могут быть даты, которых нет в другой, и наоборот, вам потребуется выполнить полное внешнее объединение. MySql не имеет такого типа соединения, но вы можете достичь этого с помощью объединения:

select    `Date`,
          sum(Amount_Received) as Sum_Amount_Received,
          sum(Amount) as Sum_Amount
from      (
                select `Date`, Amount_Received, 0 as Amount
                from   Receive_Amount_Details
                union
                select `Date`, 0, Amount
                from   SitewiseEmployee
          ) as dates
group by  `Date`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...