1
select ca.cust_ac_no, ca.ccy, ah.trn_dt,
(SELECT  sum(COALESCE(hi.lcy_amount,0))                                    
     FROM actb_history hi 
     WHERE hi.ac_no='0013001600038'  and hi.drcr_ind = 'C' and ah.trn_dt = hi.trn_dt
     GROUP BY hi.ac_no,hi.drcr_ind) as Total_Credits,
(SELECT  sum(COALESCE(hi.lcy_amount,0))                                    
     FROM actb_history hi 
     WHERE hi.ac_no='0013001600038'  and hi.drcr_ind = 'D'and ah.trn_dt = hi.trn_dt
     GROUP BY hi.ac_no,hi.drcr_ind) as Total_Debits,

((SELECT  sum( COALESCE(hi.lcy_amount,0))                                    
     FROM actb_history hi 
     WHERE hi.ac_no='0013001600038'  and hi.drcr_ind = 'C' and ah.trn_dt = hi.trn_dt
     GROUP BY hi.ac_no,hi.drcr_ind)
     -
(SELECT  sum(COALESCE(hi.lcy_amount,0))                                    
     FROM actb_history hi 
     WHERE hi.ac_no='0013001600038'  and hi.drcr_ind = 'D'and ah.trn_dt = hi.trn_dt
     GROUP BY hi.drcr_ind,hi.drcr_ind )) as difference

from actb_history ah, sttm_cust_account ca
where ah.ac_no='0013001600038'
and ah.ac_no = ca.cust_ac_no
group by ca.cust_ac_no,  ca.ccy, ah.trn_dt

上記のコードは、total_credits と total_debits に対応する値がある場合にのみ差を計算します

計算式は、クレジット - デビット = 差額です。問題は、一部のトランザクションが 1 つしかなく、もう 1 つが null であることです。そのため、null を追加した後の結果は null です。

私の望みは、null 値に対してゼロを表示し、減算を実行できるようにすることです。

助けてください。

4

3 に答える 3

2

COALESCE()コードの変更を最小限に抑えるには、ステートメントがある場所に移動する必要があります。

サブクエリ内ではなく、サブクエリの外に移動します。

select ca.cust_ac_no, ca.ccy, ah.trn_dt,
(SELECT  sum(COALESCE(hi.lcy_amount,0))                                    
     FROM actb_history hi 
     WHERE hi.ac_no='0013001600038'  and hi.drcr_ind = 'C' and ah.trn_dt = hi.trn_dt
     GROUP BY hi.ac_no,hi.drcr_ind) as Total_Credits,
(SELECT  sum(COALESCE(hi.lcy_amount,0))                                    
     FROM actb_history hi 
     WHERE hi.ac_no='0013001600038'  and hi.drcr_ind = 'D'and ah.trn_dt = hi.trn_dt
     GROUP BY hi.ac_no,hi.drcr_ind) as Total_Debits,

COALESCE((SELECT  sum(hi.lcy_amount)                                    
     FROM actb_history hi 
     WHERE hi.ac_no='0013001600038'  and hi.drcr_ind = 'C' and ah.trn_dt = hi.trn_dt
     GROUP BY hi.ac_no,hi.drcr_ind), 0)
     -
COALESCE((SELECT  sum(hi.lcy_amount)                                    
     FROM actb_history hi 
     WHERE hi.ac_no='0013001600038'  and hi.drcr_ind = 'D'and ah.trn_dt = hi.trn_dt
     GROUP BY hi.drcr_ind,hi.drcr_ind ), 0) as difference

from actb_history ah, sttm_cust_account ca
where ah.ac_no='0013001600038'
and ah.ac_no = ca.cust_ac_no
group by ca.cust_ac_no,  ca.ccy, ah.trn_dt

これはSUM()、相関サブクエリによって処理されるレコードが存在しない可能性があるためです。その場合、 はありません。SUM(0)まったく何もありません ( NULL)。COALESCE()したがって、サブクエリの外側に置くと、 が にno records processed変わります0

于 2012-06-06T13:11:21.623 に答える
0

COALESCEを作ってみてくださいSUM

于 2012-06-06T13:10:42.747 に答える