如何从已连接的子查询中访问聚合和连接字段

时间:2017-05-01 15:47:14

标签: sql oracle subquery aggregate-functions

这里有一些伪代码来表示我想要做的事情:

SELECT A.ID
     --, B.DESCRIPTION
     --, B.YEAR     
  FROM TABLE_A A
INNER JOIN (SELECT ID
                 , DESC1 || ' : ' || DESC2 AS "Description"
                 , MAX(YEAR)
              FROM TABLE_B
          GROUP BY ID
                 , DESC1 || ' : ' || DESC2) B
                ON A.ID = B.ID

就目前而言,这个查询运行得很好。如果我从SELECT语句中单独取消注释这两个字段,则每个字段都会给我一个无效的标识符错误。

如何从此子查询中访问这些聚合和连接的字段?

2 个答案:

答案 0 :(得分:1)

如果您不需要,请不要用双引号别名。

您需要将MAX(YEAR)别名为YEAR,以便正确引用它。

SELECT A.ID
   , B.DESCRIPTION
   , B.YEAR     
  FROM TABLE_A A
INNER JOIN (SELECT ID
                 , DESC1 || ' : ' || DESC2 AS DESCRIPTION
                 , MAX(YEAR) AS YEAR
              FROM TABLE_B
          GROUP BY ID
                 , DESC1 || ' : ' || DESC2) B
                ON A.ID = B.ID

答案 1 :(得分:0)

我相信下面的内容会给你所需要的东西。我使用了基于yearid的其他加入。可能如果您提供一些样本数据和确切的预期输出,也可能有更好的方法。

SELECT A.ID
 ,B.DESCRIPTION
 ,B.YEAR     
FROM TABLE_A A
INNER JOIN 
    (select b1.* from table_b b1
    inner join 
        (SELECT ID
        , DESC1 || ' : ' || DESC2 AS "Description"
        , MAX(YEAR)
        FROM TABLE_B
        GROUP BY ID
        , DESC1 || ' : ' || DESC2
        ) b2
    on b1.id=b2.id and b1.year=b2.year
    ) B
ON A.ID = B.ID