Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 如何将主查询列值传递给嵌套的子查询Where条件?_C# 4.0_Oracle11g_Oracle10g - Fatal编程技术网

C# 4.0 如何将主查询列值传递给嵌套的子查询Where条件?

C# 4.0 如何将主查询列值传递给嵌套的子查询Where条件?,c#-4.0,oracle11g,oracle10g,C# 4.0,Oracle11g,Oracle10g,我正在使用嵌套子查询编写此查询,以根据支出表中的条件查找PREPARED_BY、VERIFIED_BY、AUTHORIZED_BY,但在我的子查询中,支出表对象CONDATE未被识别,并引发此错误: ORA-00904:异常情况:标识符无效 代码: 您遇到的问题是父表只能由一级以下的子查询引用。您试图从两级以下子查询中的父表访问列,因此会出现错误 为了访问子查询中的父列,您需要重写它,使其只下降一级 这可以通过使用聚合函数来实现,例如: SELECT ex.conno, ex.it

我正在使用嵌套子查询编写此查询,以根据支出表中的条件查找PREPARED_BY、VERIFIED_BY、AUTHORIZED_BY,但在我的子查询中,支出表对象CONDATE未被识别,并引发此错误:

ORA-00904:异常情况:标识符无效

代码:


您遇到的问题是父表只能由一级以下的子查询引用。您试图从两级以下子查询中的父表访问列,因此会出现错误

为了访问子查询中的父列,您需要重写它,使其只下降一级

这可以通过使用聚合函数来实现,例如:

SELECT ex.conno,
       ex.itemno,
       ex.adv_no || ' ' || to_char(ex.condate, 'DD-MON-YYYY') chequenodate,
       ex.conname,
       ex.apaid,
       ex.dpayment,
       gf.gf_name,
       expenditure_type,
       ex.off_code,
       ofc.officename,
       ex.remarks,
       (SELECT MAX(a.prepared_by) KEEP (dense_rank FIRST ORDER BY a.id ASC)
        FROM   authorizatiion a
        WHERE  (a.pre_last_date >= ex.condate OR a.pre_last_date IS NULL)
        AND     a.project_id = 128) prepared_by,
       (SELECT MAX(a.verified_by) KEEP (dense_rank FIRST ORDER BY a.id ASC)
        FROM   authorizatiion a
        WHERE  (a.ve_last_date >= ex.condate OR a.ve_last_date IS NULL)
        AND     a.project_id = 128) verified_by,
       (SELECT MAX(a.authorized_by) KEEP (dense_rank FIRST ORDER BY a.id ASC)
        FROM   authorizatiion a
        WHERE  (a.au_last_date >= ex.condate OR a.au_last_date IS NULL)
        AND     a.project_id = 128) authorized_by
FROM   expenditure ex
       INNER JOIN officecode ofc ON ofc.off_code = ex.off_code
       INNER JOIN coa_category ca ON ca.coa_cat_id = ex.coa_cat_id
       INNER JOIN g_fund_type gf ON gf.gf_type_id = ca.gf_type_id
WHERE  ex.conno = 'MGSP/PMU/NON/145'
AND    ex.itemno = 149;
注意,我在这里使用了MAX和FIRST;这意味着,如果有多行具有相同的最低id,则将使用prepared_by列的最高值。如果需要最小值,可以将其更改为MIN。这仅在每个id有多行时才相关,否则它只返回最低id的prepared_by列的值

SELECT ex.conno,
       ex.itemno,
       ex.adv_no || ' ' || to_char(ex.condate, 'DD-MON-YYYY') chequenodate,
       ex.conname,
       ex.apaid,
       ex.dpayment,
       gf.gf_name,
       expenditure_type,
       ex.off_code,
       ofc.officename,
       ex.remarks,
       (SELECT MAX(a.prepared_by) KEEP (dense_rank FIRST ORDER BY a.id ASC)
        FROM   authorizatiion a
        WHERE  (a.pre_last_date >= ex.condate OR a.pre_last_date IS NULL)
        AND     a.project_id = 128) prepared_by,
       (SELECT MAX(a.verified_by) KEEP (dense_rank FIRST ORDER BY a.id ASC)
        FROM   authorizatiion a
        WHERE  (a.ve_last_date >= ex.condate OR a.ve_last_date IS NULL)
        AND     a.project_id = 128) verified_by,
       (SELECT MAX(a.authorized_by) KEEP (dense_rank FIRST ORDER BY a.id ASC)
        FROM   authorizatiion a
        WHERE  (a.au_last_date >= ex.condate OR a.au_last_date IS NULL)
        AND     a.project_id = 128) authorized_by
FROM   expenditure ex
       INNER JOIN officecode ofc ON ofc.off_code = ex.off_code
       INNER JOIN coa_category ca ON ca.coa_cat_id = ex.coa_cat_id
       INNER JOIN g_fund_type gf ON gf.gf_type_id = ca.gf_type_id
WHERE  ex.conno = 'MGSP/PMU/NON/145'
AND    ex.itemno = 149;