1

カーソルを使用せずに 1 つの列を最後の列と比較できるように、ラグ関数を使用しようとしています。ただし、比較する必要がある列は、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": 無効な識別子

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

order by一般的な答えはノーです。Oracle では、句を除いて、定義されているレベルで列エイリアスを使用することはできません。

ただし、lag定数の値を取得しているため、クエリには他の問題があります。@Tony Andrewのクエリは、実際に必要なもののようです。

于 2011-06-21T17:59:18.950 に答える