2017-01-31 4 views
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», в зависимости от того, возвращает ли подзапрос ровно одну строку или нулевые строки, напишите так.

Я подозреваю, что этот подзапрос (или, возможно, другой в вашем коде, используемый аналогичным образом) возвращает более одной строки - в этом случае вы получите именно ту ошибку, которую вы получили.

Смежные вопросы