Объединение SQL-таблиц - PullRequest
       6

Объединение SQL-таблиц

0 голосов
/ 04 октября 2018

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

У меня есть эти таблицы со следующими столбцами

Таблица1: покупки

Продавец|Количество |Цена

Таблица2: оплата

Поставщик |Платный |

Таблица результатов

Поставщик |Купленный итог |PaidTotal | (приобретено - оплачено) |

Мой очень неправильный запрос Sql

 SELECT t.Vendor, SUM(Quantity * Price) as TotalPurch
    FROM purchases t
    LEFT JOIN (SELECT Vendor, SUM(paid) as TotalPaid FROM paysup GROUP BY Vendor) y
    ON t.Vendor = y.Vendor
    GROUP BY t.Vendor

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

В этих обстоятельствах типично наличие таблицы поставщиков, которую вы не упоминаете

  SELECT v.Vendor
     , purch.PurchasedTotal
     , paid.PaidTotal
     , (COALESCE(purch.PurchasedTotal, 0) - COALESCE(paid.PaidTotal, 0)) AS "(Purchased - Paid)"
  FROM Vendors v
  LEFT JOIN ( SELECT Vendor, SUM(Quantity * Price) AS PurchasedTotal
              FROM purchases
              GROUP BY Vendor
             ) purch ON v.Vendor = purch.Vendor
  LEFT JOIN ( SELECT Vendor, SUM(Paid) AS PaidTotal
                FROM paysup
               GROUP BY Vendor
       ) paid ON v.Vendor = paid.Vendor
  ;
0 голосов
/ 04 октября 2018

Вы можете улучшить читаемость с помощью общих табличных выражений ( CTE ):

WITH paid AS ( SELECT Vendor, SUM(Paid) AS PaidTotal
           FROM paysup
           GROUP BY Vendor
   ),
   purch AS ( SELECT Vendor, SUM(Quantity * Price) AS PurchasedTotal
          FROM purchases
          GROUP BY Vendor
   ) 
/* The main query: */
SELECT 
  v.Vendor, 
  purch.PurchasedTotal, 
  paid.PaidTotal, 
  (COALESCE(purch.PurchasedTotal, 0) - COALESCE(paid.PaidTotal, 0)) AS "(Purchased - Paid)"
 FROM Vendors v
  LEFT JOIN purch ON v.Vendor = purch.Vendor
  LEFT JOIN paid ON v.Vendor = paid.Vendor;
0 голосов
/ 04 октября 2018

Попробуйте это:

SELECT COALESCE(a.Vendor, b.Vendor) AS Vendor
     , a.PurchasedTotal
     , b.PaidTotal
     , (COALESCE(a.PurchasedTotal, 0) - COALESCE(b.PaidTotal, 0)) AS "(Purchased - Paid)"
  FROM ( SELECT Vendor, SUM(Quantity * Price) AS PurchasedTotal
           FROM purchases
          GROUP BY Vendor
       ) a
  FULL JOIN ( SELECT Vendor, SUM(Paid) AS PaidTotal
                FROM paysup
               GROUP BY Vendor
       ) b ON b.Vendor = a.Vendor
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...