2017-08-08 13 views
-10

`私が行うことができますどのようにそれ

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

TXNID:M003 TOTAL_AMT:25 ACCOUNT_CATEGORY:収益デビット:nullのクレジット:ヌル

TXNID:M003 TOTAL_AMT:25 ACCOUNT_CATEGORY:資産借方:nullのクレジット:ヌル

借方記入欄のルール:[account-category = Expenseの場合は合計金額、TxnIdと一致するRevenue項目のaccount-category = Assetの場合は合計金額。そうでない場合は0]

このテーブルの結果をデビットカラムに入力したいのですが、どうすればいいですか?

クレジット列に入金するためのルール:[account-category = Revenueの場合は合計金額、TxnIdと一致する費用カテゴリの場合はasset-category = Assetが1を返します。そうでない場合は0] このテーブル内の結果をクレジット列に検証したいのですが、どうすればいいですか?

+0

人々は今 –

+0

を理解できるように、サンプルデータと予想される出力を追加して行くために、それは良いのですか? –

答えて

2

は私が正しく、ルールを理解している場合:

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

そして、無効になる可能性があるので、あなたが数えることができる値を格納するのは良い習慣ではありません。むしろ私はビューを使用したいと思います。 –

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

に属しています。クレジット列を設定するためのルール:[account-category = Revenueの場合は合計額、TxnIdと一致する費用項目の場合はaccount-category =そうでなければ0] –

関連する問題