SQL Sumation из разных таблиц - PullRequest
0 голосов
/ 21 сентября 2018

Мне нужна помощь в этом вопросе.

У меня есть три таблицы.

Таблица продуктов, таблица счетов-фактур, таблица денежных средств

Таблица продуктов состоит из 2 столбцов, как показано ниже.(PID, BRAND)

Таблица счетов-фактур имеет 2 столбца следующим образом (PID, TOTALSALES)

Таблица денежных средств имеет 2 столбца следующим образом (PID, TOTALSALES)

PID можетиметь много разных БРЕНДОВ.

, например:

PID   BRAND
1     TEST1
2     TEST2
3     TEST3

Все три таблицы связаны столбцом PID.

У меня есть много строк в таблицах счетов и наличных..

Моя проблема в том, чтобы сгруппировать значения SUMMED TOTALSALES в таблицах INVOICE и CASH BRAND.

Я пытался использовать левые объединения, но значение суммирования всегда увеличивается, когда их больше 2Таблица в соединении.

Любая помощь будет высоко оценен.

Ответы [ 4 ]

0 голосов
/ 21 сентября 2018

суммировать данные в таблицах счетов и наличных по отдельности

 SELECT
    pr.BRAND, (ISNULL(Inv.TOTALSALES, 0.00) + ISNULL(Csh.TOTALSALES, 0.00)) TotalSales
FROM Products pr
LEFT JOIN (
    SELECT
        PID, SUM(TOTALSALES) TOTALSALES
    FROM Invoice GROUP BY PID
) Inv ON Inv.PID = pr.PID
LEFT JOIN  (
    SELECT
        PID, SUM(TOTALSALES) TOTALSALES
    FROM Cash GROUP BY PID
) Csh ON Csh.PID = pr.PID
ORDER BY pr.BRAND
0 голосов
/ 21 сентября 2018

Вы можете использовать union all, а затем объединить результаты из двух таблиц вместе:

select p.brand, sum(invoice_sales) as invoice_sales, sum(cash_sales) as cash_sales
from ((select pid, totalsales as invoice_sales, 0 as cash_sales
       from invoice i
      ) union all
      (select pid, 0, totalsales
       from cash c
      )
     ) ic join
     product p
     on ic.pid = p.id
group by p.brand;
0 голосов
/ 21 сентября 2018

Другой способ сделать это - использовать подзапросы

select p.*,
       (select sum(i.TOTALSALES) from Invoice i where i.PID = p.PID) as TotalSalesInvoice,
       (select sum(c.TOTALSALES) from Cash c where c.PID = p.PID) as TotalSalesCash
from   Products p
0 голосов
/ 21 сентября 2018

Вам нужны две отдельные суммы для результатов объединения таблиц по значениям PID, и вам нужно будет сгруппировать записи по BRAND

select sum(Invoice.TOTALSALES) as invoice_sales, sum(Cash.TOTALSALES) as cash_sales
from Products
join Invoice
on Products.PID = Invoice.PID
join Cash
on Products.PID = Cash.PID
group by Invoice.PID, Products.BRAND;

Если вам не нужно группировать товары, просто пропуститеInvoice.PID из группы.

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