加入多个子查询Oracle

时间:2015-12-17 18:13:52

标签: sql oracle

我有两组工作的子查询。我正在尝试将它们组合成一个包含以下字段的查询:

select tos.source_system_order_id , tos.TOS_Date,  tos.TOS_Final_Charge_Amt_Sum , oes.OES_Final_Charge_Amt_Sum

第一次查询:

SELECT tos1.source_system_order_id, 
       tos1.tos_date, 
       SUM(tos1.tos_final_charge_amt_sum) 
FROM   (SELECT source_system_order_id, 
               source_system_cd, 
               To_char(billing_month_dt, 'YYYYMM') AS TOS_Date, 
               tos_final_charge_amt_sum 
        FROM   tl_ov_stage 
        ORDER  BY source_system_order_id) TOS1 
GROUP  BY tos1.source_system_order_id, 
          tos1.tos_date 

2ndquery

SELECT OES1.source_system_order_id, 
       oes1.oes_date, 
       SUM(oes1.oes_final_charge_amt_sum) AS OES_Final_Charge_Amt_Sum 
FROM   (SELECT To_char("date", 'YYYYMM')   AS OES_Date, 
               To_char("service order id") AS SOURCE_SYSTEM_ORDER_ID, 
               oes_final_charge_amt_sum 
        FROM   v_ord_valuation_detail@prodr_link) OES1 
GROUP  BY OES1.source_system_order_id, 
          oes1.oes_date, 
          oes1.order_status 

1 个答案:

答案 0 :(得分:1)

尝试使用CTE合并两个select个查询。我发现CTE在这种情况下更具可读性

with tos 
as
(
SELECT tos1.source_system_order_id, 
       tos1.tos_date, 
       SUM(tos1.tos_final_charge_amt_sum) 
FROM   (SELECT source_system_order_id, 
               source_system_cd, 
               To_char(billing_month_dt, 'YYYYMM') AS TOS_Date, 
               tos_final_charge_amt_sum 
        FROM   tl_ov_stage 
        ORDER  BY source_system_order_id) TOS1 
GROUP  BY tos1.source_system_order_id, 
          tos1.tos_date 
), 
OES as
(
SELECT OES1.source_system_order_id, 
       oes1.oes_date, 
       SUM(oes1.oes_final_charge_amt_sum) AS OES_Final_Charge_Amt_Sum 
FROM   (SELECT To_char("date", 'YYYYMM')   AS OES_Date, 
               To_char("service order id") AS SOURCE_SYSTEM_ORDER_ID, 
               oes_final_charge_amt_sum 
        FROM   v_ord_valuation_detail@prodr_link) OES1 
GROUP  BY OES1.source_system_order_id, 
          oes1.oes_date, 
          oes1.order_status 
)
select tos.source_system_order_id, 
       tos.TOS_Date,  
       tos.TOS_Final_Charge_Amt_Sum, 
       oes.OES_Final_Charge_Amt_Sum
from tos
inner join oes
        on tos.source_system_order_id = oes.source_system_order_id
       AND tos.tos_date = oes.oes_date -- Remove if this is not needed