SUM и MINUS в одном параметре SQL-запроса - PullRequest
0 голосов
/ 28 марта 2019

У меня есть рабочий запрос 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, а затем вычесть GALSXMISTINT из Mistints2018, чтобы получить окончательный результат NetGalsMistint2018. Как бы я это сделал?

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы можете взять условную сумму разницы:

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 голос
/ 28 марта 2019

Не уверен в ваших точных требованиях, но вот пример левого присоединения к подзапросу сумм столбца.

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;
...