как сделать этот запрос в Oracle, что-то не хватает - PullRequest
0 голосов
/ 24 сентября 2018
SELECT   ( select (NVL((SELECT AMOUNT  
    FROM ASGN_TRNS_TBL 
    WHERE 
        TRNS_DATE = '1-SEP-18' --v_current_date 
        AND DEP_ID = 1--v_current_department 
        AND ACC_NO =6),0)

        +

    -- 5 account
    NVL((SELECT AMOUNT 
    FROM ASGN_TRNS_TBL 
    WHERE 
        TRNS_DATE = '1-SEP-18'--v_current_date 
        AND DEP_ID = 1--v_current_department 
        AND ACC_NO = 5),0)) FROM DUAL  

        /

    -- 2 account
SELECT (NVL((SELECT AMOUNT 
    FROM ASGN_TRNS_TBL 
    WHERE 
        TRNS_DATE  ='1-SEP-18'-- v_current_date 
        AND DEP_ID = 1--v_current_department 
        AND ACC_NO = 2),0)

        +

    -- 3 account
    NVL((SELECT AMOUNT 
    FROM ASGN_TRNS_TBL 
    WHERE 
        TRNS_DATE  = '1-SEP-18'--v_current_date 
        AND DEP_ID = 1--v_current_department 
        AND ACC_NO = 3),0)) FROM DUAL )

        FROM DUAL;

Мой вопрос заключается в том, как получить значения из этого запроса.Я хочу сделать что-то вроде этого (выбрать сумму + выбрать сумму) / (выбрать другую сумму + выбрать другую сумму) и получить общую стоимость, используя ключевое слово FROM DUAL ...

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете попробовать использовать агрегатную функцию условия вместо подзапроса в select

SELECT SUM(CASE WHEN TRNS_DATE = TO_DATE('01-09-2018' ,'DD-MM-YYYY') AND DEP_ID = 1 AND ACC_NO IN (5,6) THEN AMOUNT ELSE 0 END) /
       SUM(CASE WHEN TRNS_DATE = TO_DATE('01-09-2018' ,'DD-MM-YYYY') AND DEP_ID = 1 AND ACC_NO IN (2,3) THEN AMOUNT ELSE 0 END) 
FROM ASGN_TRNS_TBL

NOTE

TRNS_DATE Кажетсякак значение типа даты.вам нужно использовать TO_DATE функцию преобразования '1-SEP-18' в тип даты, иначе это будет строка.

...