You can use a MERGE statement to combine the rows:
MERGE INTO daily_data dst
USING (
SELECT dept,
class,
"DATE",
SUM(transfer_retail) AS transfer_retail,
SUM(transfer_cost) AS transfer_cost
FROM daily_data
WHERE book_id = 200
-- AND dept = 100
-- AND class = 1
-- AND "DATE" = DATE '2022-04-10'
GROUP BY dept, class, "DATE"
) src
ON ( dst.book_id = 100
AND dst.dept = src.dept
AND dst.class = src.class
AND dst."DATE" = src."DATE")
WHEN MATCHED THEN
UPDATE
SET transfer_retail = dst.transfer_retail + src.transfer_retail,
transfer_cost = dst.transfer_cost + src.transfer_cost;
Which, for the sample data:
CREATE TABLE DAILY_DATA (DEPT, CLASS, "DATE", BOOK_ID, TRANSFER_RETAIL, TRANSFER_COST) AS
SELECT 100, 1, DATE '2022-04-10', 100, 23.4, 54 FROM DUAL UNION ALL
SELECT 100, 1, DATE '2022-04-10', 200, 0, 92 FROM DUAL;
Then after the MERGE, the table will contain:
| DEPT |
CLASS |
DATE |
BOOK_ID |
TRANSFER_RETAIL |
TRANSFER_COST |
| 100 |
1 |
10-APR-22 |
100 |
23.4 |
146 |
| 100 |
1 |
10-APR-22 |
200 |
0 |
92 |
db<>fiddle here