--どんな助けでも大歓迎です
2 に答える
0
あなたが何をしたいのかを正しく理解している場合 (ステータスの値がない場合は、前の行の値を使用してください)、LAGと LEAD を NVL/COALESCE と組み合わせて使用することを検討する必要があります。
于 2010-01-20T09:41:29.077 に答える
0
前の行が の場合にステータスを取得したい場合はNULL
、次を使用しますLAG
。
SELECT
rn,
device_num,
COALESCE( status_01, LAG(status_01) OVER ( ORDER BY pri_id ) ) status_01,
COALESCE( status_02, LAG(status_02) OVER ( ORDER BY pri_id ) ) status_02
FROM tt1
ORDER BY pri_id
あなたの例は、それが設定された最後の行からそれを取得するので、そのようなことをする必要があるかもしれません:
SELECT
rn,
device_num,
COALESCE( status_01, ( SELECT MAX(status_01) KEEP( DENSE_RANK LAST ORDER BY pri_id )
FROM tt1 tt1_1
WHERE tt1_1.id < tt1.id
AND tt1_1.status_01 IS NOT NULL ) ) status_01,
COALESCE( status_02, ( SELECT MAX(status_02) KEEP( DENSE_RANK LAST ORDER BY pri_id )
FROM tt1 tt1_2
WHERE tt1_2.id < tt1.id
AND tt1_2.status_02 IS NOT NULL ) ) status_02
FROM tt1
ORDER BY pri_id
于 2010-01-20T09:48:04.457 に答える