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