Как объединить результаты из двух разных таблиц, используя sql - PullRequest
0 голосов
/ 15 октября 2019

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

  1. Клиенты
  2. Заказы
  3. Элементы заказа
  4. Продажи

Таблица «Заказы» содержит статус заказа «Выполнен» или «Обрабатывается». Когда заказ завершается, я сохраняю информацию о продажах в таблице продаж, отмечая заказ как завершенный, а также сохраняю общую сумму и остаток в таблице продаж. Теперь я хочу получить имя клиента с суммой задолженности из таблицы заказов и баланс для каждого клиента из таблицы продаж. Я использовал этот запрос, но не смог получить желаемых результатов.

Вывод:

current output

И желаемый вывод:

desired output

Select c.Name As CustomerName, c.ContactNumber AS CustomerContactNumber, c.Location AS CustomerAddress, Sum(oi.Amount) As Amount 
from OrderItems oi 
  inner join Orders o on oi.OrderId=o.Id 
  inner join Customers c on o.CustomerId=c.Id 
Where o.Status=='Processing' Group By o.CustomerId

UNION

Select c.Name As CustomerName, c.ContactNumber AS CustomerContactNumber, c.Location AS CustomerAddress,SUM(s.Balance) As Balance 
from Sales s 
  inner join Customers c on s.CustomerId=c.Id 
Group By s.CustomerId

1 Ответ

0 голосов
/ 15 октября 2019

вам не нужно union, вы можете использовать left join, чтобы присоединить sum(sales) к вашему клиенту orders стол.

Select c.Name As CustomerName
    , c.ContactNumber AS CustomerContactNumber
    , c.Location AS CustomerAddress
    , Sum(oi.Amount) As Amount
    , Sum(t2.Balance) As Balance    
from OrderItems oi 
inner join Orders o on oi.OrderId=o.Id 
inner join Customers c on o.CustomerId=c.Id 
left join
    (Select s.CustomerId
        , SUM(s.Balance) As Balance 
        from Sales s 
        inner join Customers c on s.CustomerId=c.Id 
        Group By s.CustomerId) t2 on t2.CustomerId = c.CustomerId
where o.Status=='Processing' 
Group By c.CustomerId, c.ContactNumber, c.Location
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...