1

我正在尝试使用 lag 函数,这样我就可以在不使用游标的情况下将一列与最后一列进行比较。但是,我需要比较的列必须使用别名,因为我正在使用 3 个联合)。这是我要做的一个例子。

SELECT
'Y' AS paid,
 lag(paid,1) over (ORDER BY salary) AS prev_paid
FROM pay
UNION 
SELECT 
  'N' as paid,
  lag(paid,1) over (ORDER BY salary) AS prev_paid
FROM not_paid

我不断收到错误:PL/SQL: ORA-00904: "paid": invalid identifier

4

2 回答 2

5

我怀疑你想要更像这样的东西:

SELECT paid, lag(paid,1) over (ORDER BY salary) AS prev_paid
FROM
(
  SELECT 'Y' as paid, salary
  FROM pay
  UNION 
  SELECT 'N' as paid, salary
  FROM not_paid
)
于 2011-06-21T14:15:06.863 回答
0

一般的答案是否定的:在 Oracle 中,您永远不能在定义列的级别使用列别名,order by子句除外。

但是,您的查询还有其他问题,因为您正在获取lag常量的值。@Tony Andrew 的查询似乎是您真正想要的。

于 2011-06-21T17:59:18.950 回答