Reputation: 301
I have 2 tables with same columns TABLE A and TABLE B with columns QUANTITY and AMOUNT.
For single column difference i used this -
SELECT (
(SELECT SUM(QUANTITY) FROM TABLE A ) - (SELECT SUM(QUANTITY) FROM TABLE B )
)
AS DIFF FROM DUAL;
I want the difference of QUANTITY and AMOUNT columns.
SELECT SUM(QUANTITY) AS SUM1, SUM(AMOUNT) SUM2 FROM TABLE A;
SELECT SUM(QUANTITY) AS SUM3, SUM(AMOUNT) SUM4 FROM TABLE B;
I want to achieve-
SELECT (SUM1 - SUM3) AS DIFF1, (SUM2 - SUM4) AS DIFF2;
Can i do it in single select query or should i go for function or something else??
Thanks for any help in advance.
Upvotes: 0
Views: 91
Reputation: 16651
It can be simply extended to
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;
Another, perhaps more readable way to do this:
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;
If you want to really combine them, here's a third way:
SELECT SUM(Quantity), SUM(Amount)
FROM
(SELECT Quantity, Amount FROM A
UNION ALL
SELECT -Quantity, -Amount FROM B)
Upvotes: 1
Reputation: 2522
OR:
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;
Upvotes: 0