与sql中具有相同列的不同表的列之和的差异

与sql中具有相同列的不同表的列之和的差异,sql,database,oracle,Sql,Database,Oracle,我有两个列相同的表表表A和表B,列为QUANTITY和AMOUNT 对于单列差异,我使用了这个- SELECT ( (SELECT SUM(QUANTITY) FROM TABLE A ) - (SELECT SUM(QUANTITY) FROM TABLE B ) ) AS DIFF FROM DUAL; 我想要数量和金额列的差异 SELECT SUM(QUANTITY) AS SUM1, SUM(AMOUNT) SUM2 FROM TABLE A; SELECT SUM(QUANT

我有两个列相同的表表表A和表B,列为QUANTITY和AMOUNT

对于单列差异,我使用了这个-

SELECT ( 
(SELECT SUM(QUANTITY) FROM TABLE A ) -  (SELECT SUM(QUANTITY) FROM TABLE B )
) 
AS DIFF FROM DUAL;
我想要数量和金额列的差异

SELECT SUM(QUANTITY) AS SUM1, SUM(AMOUNT) SUM2 FROM TABLE A;

SELECT SUM(QUANTITY) AS SUM3, SUM(AMOUNT) SUM4 FROM TABLE B;
我想实现-

SELECT (SUM1 - SUM3) AS DIFF1, (SUM2 - SUM4) AS DIFF2;
我可以在单选查询中完成它,还是应该使用函数或其他方法


提前谢谢你的帮助

它可以简单地扩展到

SELECT 
(SELECT SUM(QUANTITY) FROM A ) -  (SELECT SUM(QUANTITY) FROM B )
AS DIFF_SUM,
(SELECT SUM(AMOUNT) FROM A ) -  (SELECT SUM(AMOUNT) FROM B )
AS DIFF_QUANT FROM DUAL;
另一种可能更具可读性的方法:

WITH a1 AS
(SELECT SUM(QUANTITY) AS SUM1, SUM(AMOUNT) SUM2 FROM A),
b1 AS
(SELECT SUM(QUANTITY) AS SUM3, SUM(AMOUNT) SUM4 FROM B)
SELECT (SUM1 - SUM3) AS DIFF1, (SUM2 - SUM4) AS DIFF2 FROM a1, b1;
如果你真的想把它们结合起来,这里有第三种方法:

SELECT SUM(Quantity), SUM(Amount)
FROM
(SELECT Quantity, Amount FROM A
UNION ALL
SELECT -Quantity, -Amount FROM B)
或:


谢谢你的快速回复。如果两个表中都有大约10列呢。我应该将其扩展到10列吗???不会有任何性能问题吗???我添加了第三个,它真正地结合了它们,并且对于很多专栏来说应该不那么乏味。如果您希望能够动态处理不同数量的列,您可能需要查看
PL/SQL
executeimmediate
,但除非您有很好的理由,否则这不是您想要了解的内容。
SELECT 
SUM(A.AMOUNT) AS SUMAMOUNTA
,SUM(A.QUANTITY) AS SUMQTYA
,SUM(B.AMOUNT) AS SUMAMOUNTB
,SUM(B.QUANTITY) AS SUMQTYB
,SUM(A.QUANTITY) - SUM(B.QUANTITY) AS DIFFQTY
,SUM(A.AMOUNT) - SUM(B.AMOUNT) DIFFSUM
FROM 
TABLEA A, TABLEB B;