If you put 'D' or 'C' in front of number(i.e. like D 123456.00 or C 4789546.00),
your complex case expressions could be simplified like this:
Code:
, REPLACE( 'C ' || CHAR(SUM(CASE
WHEN y.amount_d_c = 'D' THEN
-y.amount
ELSE y.amount
END ) )
, 'C -'
, 'D '
) AS a_amount
If you want the result like:
Code:
NUM_CODE ... ... D_C A_AMOUNT
-------- ------ ------ --- ------------
D 123456.00
C 4789546.00
An answer would be like this:
Code:
SELECT
...
, CASE
WHEN a_amount < 0 THEN
'D'
ELSE 'C'
END AS d_c
, ABS(a_amount) AS a_amount
FROM (SELECT
y.num_code
, y.group_code
, u.product_code
, y.symbol
, SUM(CASE
WHEN y.amount_d_c = 'D' THEN
-y.amount
ELSE y.amount
END ) AS a_amount
FROM ...
WHERE ...
GROUP BY
...
)
;
If you want the result like:
Code:
NUM_CODE ... ... D_C C_AMOUNT D_AMOUNT
-------- ------ ------ --- ------------ ------------
D - 123456.00
C 4789546.00 -
An answer would be like this:
Code:
SELECT
.....
, CASE
WHEN a_amount < 0 THEN
'D'
ELSE 'C'
END AS d_c
, CASE WHEN a_amount >= 0 THEN a_amount END AS c_amount
, NULLIF(ABS(a_amount) , a_amount) AS d_amount
FROM ( .....)
;