Oracle滞后函数,它可以接受列别名吗?

时间:2011-06-21 13:58:56

标签: oracle plsql 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:“付费”:无效的标识符

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分:0)

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

但是,您的查询还有其他问题,因为您获得了常量的lag值。 @Tony Andrew的查询看起来就像你真正想要的那样。