我怎么能做到这一点

问题描述:

`我怎么能做到这一点

SELECT TXNID, 
     TOTAL_AMOUNT, 
     ACCOUNT_CATEGORY, 
     DEBIT 
FROM ACCOUNTING_BOOK 
    WHERE TXNID like 'M003%' ; 

TXNID:M003 TOTAL_AMT:25 ACCOUNT_CATEGORY:收入借:零贷:空

TXNID:M003 TOTAL_AMT:25 ACCOUNT_CATEGORY:资产借:零贷:空

填充借方列的规则:[Total-Amount if account-category = Expense或if account-category =相应的收入项目的资产,由TxnId匹配;否则为0]

想要验证此表内部的结果转换为借记栏。如何才能做到这一点?

信用列填充规则:[Total-Amount if account-category = Revenue或者account-category =由TxnId匹配的相应费用项目的资产将返回1;否则为0] 想要将此表内的结果验证为信用列。如何才能做到这一点?

+0

添加示例数据和预期的输出,使人们能够理解 – 2017-08-08 14:51:28

+0

现在是好去? –

如果我理解正确的规则:

update accounting_book ab 
    set debit = case when account_category in ('Expense', 'Asset') 
        then (select sum(total_amt) 
          from accounting_book 
          where account_category = 'Revenue' 
          and txnid = ab.txnid) 
        else 0 
       end 

编辑:

规则填充信用列:[总-金额如果 帐户类别=收入或者如果帐户类别=对应 的资产对应由TxnId匹配的费用项返回1; 0 否则]

到上一次更新类似:

update accounting_book ab 
    set credit = case when account_category in ('Revenue', 'Asset') 
        and exists (select 1 
            from accounting_book 
            where account_category = 'Expense' 
            and txnid = ab.txnid) 
        then 1 
        else 0 
       end 
+0

可以在函数的帮助下完成吗? –

+0

@saurav - 如果它在SQL中完成,为什么你想要一个函数?也许你需要再次编辑你的问题,并提供更多关于你的情况的细节。 – APC

+0

不好的做法是存储可以计数的值,因为它们可能会失效。我宁愿使用视图。 –

 CASE WHEN A.ACCOUNTCATEGORY IN('Revenue','Asset') 
       AND EXISTS (SELECT TOTAL_AMOUNT 
       FROM ACCOUNTING_BOOK 
       WHERE ACCOUNTCATEGORY='Expense' 
       AND TXNID=A.TXNID) 
       THEN A.TOTAL_AMOUNT 
       ELSE 0 
       END, 

       CASE WHEN A.ACCOUNTCATEGORY IN('Expense','Asset') 
       AND EXISTS (SELECT TOTAL_AMOUNT 
       FROM ACCOUNTING_BOOK 
       WHERE ACCOUNTCATEGORY='Revenue' 
       AND TXNID=A.TXNID) 
       THEN A.TOTAL_AMOUNT 
       ELSE 0 
       end); 


END LOOP; 
END; 
/
+0

当我这样做时,借记栏给了我正确的输出,但信用列来到0,因为它包含负值。我想借助游标使用信用列而不使用更新语句。 –

+0

第一种情况说明属于信用栏 –

+0

填充信用栏的规则:[Total-Amount if account-category = Revenue或者account-category =相应费用项目的资产与TxnId匹配; 0否则] –