Если вы хотите избежать использования Union или Union ALL (возможно, по соображениям эффективности), тогда работает следующее:
SELECT (1.Qty+2.Qty) AS total_qty FROM (SELECT SUM(Qty) Qty FROM MC) 1,
(SELECT SUM(Qty) Qty FROM Amex) 2;
Вот пример, если вы хотите расширить это, чтобы включить Group Byсостояние.Скажем, у нас есть Cust_ID на MC и Amex, чтобы идентифицировать клиента, который сделал каждый заказ, и мы хотим знать суммы для каждого клиента.Код будет выглядеть следующим образом:
SELECT COALESCE(1.Cust_ID, 2.Cust_ID) Cust_ID, (1.Qty+2.Qty) AS total_qty
FROM (SELECT Cust_ID, SUM(Qty) Qty FROM MC GROUP BY Cust_ID) 1
FULL OUTER JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM Amex GROUP BY Cust_ID) 2 ON 1.Cust_ID = 2.Cust_ID;
Если в базе данных существует таблица Customer, то это можно упростить до:
SELECT c.Cust_ID, (1.Qty+2.Qty) AS total_qty FROM Customer c
LEFT JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM MC GROUP BY Cust_ID) 1 ON 1.Cust_ID = c.Cust_ID
LEFT JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM Amex GROUP BY Cust_ID) 2 ON 2.Cust_ID = c.Cust_ID;