两个子查询和一个计算字段

时间:2014-08-21 20:34:46

标签: sql sql-server-2008 subquery calculated-field

我正在开发一个非常大的查询来从陆军预备数据仓库中检索数据。查询的目的是填充Access数据库表,然后将其用于组织内的表单和报表。由于涉及大量字段并限制所需的表和聚合的数量,因此通过组合两个子查询来形成查询,如下所示(为简单起见,代码示例省略了实际查询中的绝大多数字段):

(SELECT SUM(cdruic6.asgn) AS 'asgn', cdruic6.uic
FROM cdruic6
LEFT OUTER JOIN c2final ON c2final.uic = cdruic6.uic
WHERE c2final.bdeuic = 'W71J'
GROUP BY cdruic6.uic) AS agg,
(SELECT SUM(CASE WHEN medpros.fmr_excep <> '' THEN 1 ELSE 0 END) AS 'fmrexcep', ldr_book.uic
FROM ldr_book
LEFT OUTER JOIN medpros ON medpros.idunique = ldr_book.idunique
WHERE ldr_book.bdeuic = 'W71J'
GROUP BY ldr_book.uic) AS ind
WHERE agg.uic = ind.uic

上述查询完全符合要求,首先显示别名'agg'的所有列,然后是每行的别名'ind'的所有列。我很满意,直到我需要创建一个涉及每个表中的字段的计算字段。我的方法是使上面的新子查询(别名'unit')并从所选数据创建新的计算字段,如下所示(三个垂直点代表前面描述的查询):

SELECT unit.*, unit.asgn-unit.fmrexcep AS 'asgn_adjexc'
FROM 
(SELECT
    .
    .
    .
 ) AS unit

此查询无法正常运行,这就是我几天来一直在努力解决的问题。保持这个相同的主题我尝试了各种方法无济于事。在给定的示例中,服务器(SQL Server 2008)返回以下错误:

无法绑定多部分标识符“AGG.UIC”。

我很感激来自SQL经验丰富的人的帮助。显然,SQL Server无法理解我想要实现的最终结果,这是一个包含以下列的表:

asgn_adjexc | asgn | uic | fmrexcep | UIC

谢谢。我处于曲线背后,确定这个问题非常简单。

马特

1 个答案:

答案 0 :(得分:0)

在最后发帖之前研了几天,今天早上我顿悟并解决了我自己的问题。对于可能遇到这种困境的任何其他人来说,问题在于尝试将两个子查询嵌套在子查询中。从代码中删除“单元”别名解决了问题。我的最终代码:

SELECT *, asgn-fmrexcep AS 'asgn_adjexc'
FROM  
(SELECT
    .
    .
    .
) AS unit