如何在oracle中执行此查询缺少某些内容

时间:2018-09-24 07:35:39

标签: sql oracle oracle12c

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 :(得分:0)

您可以尝试使用条件聚合函数代替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

注意

TRNS_DATE似乎是日期类型值。您需要使用TO_DATE函数 将'1-SEP-18'转换为日期类型,否则将为字符串。