Функция задержки Oracle, может ли она принимать псевдоним столбца? - PullRequest
1 голос
/ 21 июня 2011

Я пытаюсь использовать функцию запаздывания, чтобы сравнить один столбец с последним без курсора.Однако столбец, с которым мне нужно сравнить, должен идти по псевдониму, поскольку я использую 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 ]

5 голосов
/ 21 июня 2011

Я подозреваю, что вы хотите что-то вроде этого:

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
)
0 голосов
/ 21 июня 2011

Общий ответ - нет: в Oracle вы никогда не можете использовать псевдоним столбца на уровне, где он определен, за исключением предложений order by.

Однако у вашего запроса есть другие проблемы, так какполучаем значение lag константы.@ Тони Эндрю запрос кажется, что вы на самом деле хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...