与sql中具有相同列的不同表的列之和的差异
我有两个列相同的表表表A和表B,列为QUANTITY和AMOUNT 对于单列差异,我使用了这个-与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
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;