Search code examples
sqloracle-databasesumcase-whensubtraction

SUM and MINUS in one SQL query parameter


I have a working Oracle SQL query to which I must make a change, but not sure how to go about it. Query below:

SELECT
  USERID,
  SUM(CONTAINERS),
  SUM(QTYMISTINT),
  SUM(QTYXMISTINT),
  SUM(CASE WHEN (BOOKDATE >= '01-JAN-18' AND BOOKDATE <= '31-DEC-18')
           THEN GALLONS ELSE 0 END) AS Dispensed2018,
  SUM(CASE WHEN (BOOKDATE >= '01-JAN-18' AND BOOKDATE <= '31-DEC-18')
           THEN GALSMISTINT ELSE 0 END) AS Mistints2018
FROM MQ_CDS_NETTRAN 
WHERE STORENBR = 1564
  AND TRANCODE IN ('DISP','MIST')
GROUP BY USERID
ORDER BY USERID;

What I need to do is regarding the parameter

(BOOKDATE >= '01-JAN-18' AND BOOKDATE <= '31-DEC-18')
THEN GALSMISTINT ELSE 0 END) AS Mistints2018

I need to subtract a quantity from that field: I need to do a SUM on another field GALSXMISTINT and then subtract GALSXMISTINT from Mistints2018 to get final result called NetGalsMistint2018. How would I do that?


Solution

  • You might be able to take a conditional sum of the difference:

    SELECT
        USERID,
        SUM(CONTAINERS),
        SUM(QTYMISTINT),
        SUM(QTYXMISTINT),
        SUM(CASE WHEN BOOKDATE BETWEEN '01-JAN-18' AND '31-DEC-18'
                 THEN GALLONS ELSE 0 END) AS Dispensed2018,
        SUM(CASE WHEN BOOKDATE BETWEEN '01-JAN-18' AND '31-DEC-18'
                 THEN GALSMISTINT ELSE 0 END) AS Mistints2018,
        SUM(CASE WHEN BOOKDATE BETWEEN '01-JAN-18' AND '31-DEC-18'
                 THEN GALSMISTINT - GALSXMISTINT ELSE 0 END) AS NetGalsMistint2018
    FROM MQ_CDS_NETTRAN 
    WHERE
        STORENBR = 1564 AND TRANCODE IN ('DISP','MIST')
    GROUP BY
        USERID
    ORDER BY
        USERID;