SUM和MINUS在一个SQL查询参数中

问题描述 投票:0回答:2

我有一个工作的Oracle SQL查询,我必须对其进行更改,但不知道如何去做。查询如下:

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;

我需要做的是关于参数

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

我需要从该字段中减去一个数量:我需要在另一个字段GALSXMISTINT上执行SUM,然后从Mistints2018中减去GALSXMISTINT以获得名为NetGalsMistint2018的最终结果。我该怎么办?

sql oracle sum case-when subtraction
2个回答
2
投票

您可能能够获得差异的条件总和:

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;

1
投票

不确定您的确切要求,但这里是左连接到列的总和的子查询的示例。

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,
  SUM(CASE WHEN (BOOKDATE >= '01-JAN-18' AND BOOKDATE <= '31-DEC-18')
           THEN GALSMISTINT ELSE 0 END) - x.SUM_GAL AS NetGalsMistint2018
FROM MQ_CDS_NETTRAN 
LEFT JOIN ( SELECT USERID, SUM(GALSXMISTINT) AS SUM_GAL 
            FROM MQ_CDS_NETTRAN
            GROUP BY USERID
) x ON X.USERID = MQ_CDS_NETTRAN.USERID
WHERE STORENBR = 1564
  AND TRANCODE IN ('DISP','MIST')
GROUP BY USERID
ORDER BY USERID;
© www.soinside.com 2019 - 2024. All rights reserved.