- 任何帮助,将不胜感激
问问题
237 次
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 回答