2017-09-06 86 views
0

我正在运行的Crystal报表正在收到错误消息。它说“无法从数据库检索数据”。它还会显示“ORA-01427:单行子查询返回多行”。似乎很简单,但我无法弄清楚。我有一个命令内置于报告没有子查询:无法从数据库检索数据ORA-01427

SELECT WA.HRORGANIZATION,TRIM(PA.ACTOR) AS "Epass",E.EMPLOYEE,TRIM(E.PRESENTATIONNAMESNAPSHOT),WA.HRORGANIZATIONUNIT,VW.ENTITYORGUNIT,VW.ENTITY 
FROM LTMPROD.AGENT AG 
LEFT OUTER JOIN LTMPROD.PARENTAGENT PA  ON PA.PARENTAGENT = AG.PARENTAGENT 
LEFT OUTER JOIN LTMPROD.EMPLOYEE E   ON TRIM(AG.KEYTEXT) = TRIM(E.HRORGANIZATION)||', '||TRIM(E.EMPLOYEE) 
LEFT OUTER JOIN LTMPROD.WORKASSIGNMENT WA ON WA.EMPLOYEE = E.EMPLOYEE 
              AND WA.WORKASSIGNMENT = E.PRIMARYWORKASSIGNMENT 
LEFT OUTER JOIN LTMPROD.XXX_ORGUNIT_ENTITY_VIEW VW ON VW.HRORGANIZATIONUNIT = WA.HRORGANIZATIONUNIT 
WHERE AG.BORBUSINESSCLASSNAME = 'Employee' 
AND TRIM(PA.ACTOR) = '{?LAWSONRS_CurrentUser}' 

我也有内置的记录选择公式:

if {?LAWSONRS_CurrentUser} = "xyz" then 
    {JOBPOSTING.PDRBEGIN} in {?Start Date} to {?End Date} 
else 
{cmdEpass.Epass} = {?LAWSONRS_CurrentUser}   
and {XXX_ORGUNIT_ENTITY_VIEW.ENTITYORGUNIT} IN 
(
    SELECT {cmdEpass.ENTITYORGUNIT} 
    CASE 606: [606]  
    CASE 609: [609,610] 
    CASE 610: [609,610] 
    CASE 883: [883]  
    DEFAULT : [0] 
) 
and 
{JOBPOSTING.PDRBEGIN} in {?Start Date} to {?End Date} 

如果将这个误差发生的(对不起任何格式问题)?如果我完全删除公式,报告运行得很好。所以我不认为问题在于命令。但我仍然想根据用户Epass进行过滤。

+0

看起来您的公式正在返回多个值 - 并且您正在使用WHERE子句中的等于比较值。 –

+0

有什么建议吗? – seth

+0

不要从函数返回多个值,或者使用IN而不是= –

回答

0

你的公式返回多个元素。

您可以更改为=IN (...)

或者使用LIMIT 1的选择只有一行。