我怎么能做到这一点
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] 想要将此表内的结果验证为信用列。如何才能做到这一点?
如果我理解正确的规则:
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
可以在函数的帮助下完成吗? –
@saurav - 如果它在SQL中完成,为什么你想要一个函数?也许你需要再次编辑你的问题,并提供更多关于你的情况的细节。 – APC
不好的做法是存储可以计数的值,因为它们可能会失效。我宁愿使用视图。 –
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,因为它包含负值。我想借助游标使用信用列而不使用更新语句。 –
第一种情况说明属于信用栏 –
填充信用栏的规则:[Total-Amount if account-category = Revenue或者account-category =相应费用项目的资产与TxnId匹配; 0否则] –
添加示例数据和预期的输出,使人们能够理解 – 2017-08-08 14:51:28
现在是好去? –