如何在不重复SELECT子查询的情况下重写此查询

And*_*eda 1 sql oracle optimization query-optimization

我写了这样的查询.它正在工作并给我我想要的结果.
我有一个SELECT查询来获取CAR_AMOUNTHOTEL_AMOUNT.
但是,我必须重复相同的SELECT查询来获得SUM两者.我无法使用别名.我怎么能避免这个?

SELECT B.EMPLOYEE_ID,
       (select SUM(AMOUNT) 
         FROM travel_reimbursements_items
         WHERE type = 'CAR' 
         AND travel_request_no = B.travel_request_no 
        AND STATUS='APPROVED') as CAR_AMOUNT,
       (select SUM(AMOUNT)
        FROM travel_reimbursements_items 
        WHERE type = 'HOTEL' 
        AND travel_request_no = B.travel_request_no 
        AND STATUS='APPROVED') as HOTEL_AMOUNT,
       NVL((select SUM(AMOUNT) 
            FROM travel_reimbursements_items 
            WHERE type = 'CAR' 
            AND travel_request_no = B.travel_request_no 
            AND STATUS='APPROVED'),0)
        +NVL((select SUM(AMOUNT) 
            FROM travel_reimbursements_items
            WHERE type = 'HOTEL' 
            AND travel_request_no = B.travel_request_no 
            AND STATUS='APPROVED'),0) as TOTAL
FROM TRAVEL_REQUEST_ITEM A
     LEFT OUTER JOIN TRAVEL_REQUEST B 
       ON (B.TRAVEL_REQUEST_NO= A.TRAVEL_REQUEST_SR_NO)
Run Code Online (Sandbox Code Playgroud)

Rob*_*ijk 6

select b.employee_id
     , sum(case when c.type = 'CAR' then c.amount end) car_amount
     , sum(case when c.type = 'HOTEL' then c.amount end) hotel_amount
     , sum(c.amount) total
  from travel_request_item a
       left outer join travel_request b
         on (b.travel_request_no= a.travel_request_sr_no)
       left outer join travel_reimbursements_items c
         on (   c.travel_request_no = b.travel_request_no
            and c.type in ('CAR','HOTEL')
            and c.status = 'APPROVED'
            )
 group by b.employee_id
Run Code Online (Sandbox Code Playgroud)

问候,
Rob.