ORA-01427:子查询返回多行

时间:2017-01-31 20:40:03

标签: oracle

当我执行下面的查询时,我收到如下消息:"ORA-01427: Sub-query returns more than one row"

Define REN_RunDate = '20160219'
Define MOP_ADJ_RunDate = '20160219'
Define RID_RunDate = '20160219'
Define Mbr_Err_RunDate = '20160219'
Define Clm_Err_RunDate = '20160219'
Define EECD_RunDate = '20160219'

select t6.Member_ID,  (Select 'Y' from MBR_ERR t7 where t7.Member_ID = t6.Member_ID and t7.Rundate = &Mbr_Err_RunDate ) Mbr_Err,
NVL(Claim_Sent_Amt,0) Sent_Claims, Rejected_Claims,Orphan_Claim_Amt,Claims_Accepted, MOP_Adj_Sent Sent_MOP_Adj,Net_Sent,
 (Case
     When Net_Sent < 45000 then 0          
     When Net_Sent > 25000 then 20500    
     Else
      Net_Sent - 45000                     
    End
   )Net_Sent_RI,

   ' ' Spacer,

 Total_Paid_Claims CMS_Paid_Claims, MOP_Adjustment CM_MOP_Adj, MOP_Adjusted_Paid_claims CM_Net_Claims, Estimated_RI_Payment CM_RI_Payment
  from
 (
 select  NVL(t3.Member_ID,t5.Member_ID)Member_ID, t3.Claim_Sent_Amt, NVL(t4.Reject_Claims_Amt,0) Rejected_Claims, NVL( t8.Orphan_Amt,0) Orphan_Claim_Amt, 
   (t3.Claim_Sent_Amt - NVL(t4.Reject_Claims_Amt,0) - NVL(t8.Orphan_Amt,0)) Claims_Accepted,
   NVL(t2.MOP_Adj_Amt,0) MOP_Adj_Sent ,
   ( (t3.Claim_Sent_Amt - NVL(t4.Reject_Claims_Amt,0)) -  NVL(t2.MOP_Adj_Amt,0) -  NVL(t8.Orphan_Amt,0) ) Net_Sent, 
 t5.Member_ID CMS_Mbr_ID,t5.Total_Paid_Claims,t5.MOP_Adjustment, t5.MOP_Adjusted_Paid_Claims, t5.Estimated_RI_Payment
 From
 (
 Select t1.Member_ID, Sum( t1.Paid_Amount) Claim_Sent_Amt
 From RENS t1
 where t1.rundate = &REN_RunDate
 group by t1.Member_ID

) t3

Left Join MOP_ADJ t2
 on (t3.Member_ID = t2.Member_ID and t2.rundate = &MOP_ADJ_RunDate)

Left Join 
 (select Member_ID, sum(Claim_Total_Paid_Amount) Reject_Claims_Amt from CLAIM_ERR
 where Rundate = &Claim_Err_RunDate
 and Claim_Total_Paid_Amount != 0
 Group by member_ID
 )t4
 on (t4.Member_ID = t3.Member_ID )

Full Outer Join 
 (
 select distinct Member_ID,Total_Paid_Claims,MOP_Adjustment,MOP_Adjusted_Paid_Claims, Estimated_RI_Payment
  from RID
 where Rundate = &RID_RunDate
 and Estimated_RI_Payment != 0
 )t5
 On(t5.Member_ID = t3.Member_ID)

Left Outer Join 
 (
 select Member_ID, Sum(Claim_Paid_Amount) Orphan_Amt
 From EECD
 where RunDate = &EECD_RunDate
 group by Member_ID
 )t8
 On(t8.Member_ID = t3.Member_ID)

 )t6
 order by Member_ID

1 个答案:

答案 0 :(得分:0)

您在select列(代码顶部)中有此表达式:

(Select 'Y' from MBR_ERR t7 where t7.Member_ID = t6.Member_ID 
                              and t7.Rundate = &Mbr_Err_RunDate ) Mbr_Err

如果要选择文字“Y”,则只需选择'Y' as Mbr_Err即可。如果要选择“Y”或null,则根据子查询是返回一行还是零行,然后以这种方式写入。

我怀疑这个子查询(或者你的代码中的另一个子查询,以类似的方式使用)返回多行 - 在这种情况下,你将得到你所得到的错误。