oracle
2017-01-31 117 views 0 likes 
0

当我执行下面的查询,我得到这样的消息:"ORA-01427: Sub-query returns more than one row"ORA-01427:子查询返回不止一行

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 
+0

我可以写一个查询,也可以。我可以编写一个更简短的查询,在执行时返回该错误。是否有*问题*,或者您是否只发布状态报告? – spencer7593

+1

[如何解决ORA-01427]的可能的重复(http://stackoverflow.com/questions/30623362/how-to-fix-ora-01427) – spencer7593

回答

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,则取决于子查询是否返回恰好一行或零行,然后按此方式写。

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

相关问题