http://pastebin.com/m24c4f508Oracle SQL для копирования строк через вниз ниже, первенствует как справиться
--Чувствуют помощи будет оценен
http://pastebin.com/m24c4f508Oracle SQL для копирования строк через вниз ниже, первенствует как справиться
--Чувствуют помощи будет оценен
Если вы просто хотите, чтобы получить статус из предыдущей строки, если она 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
спасибо, второй из них идеально подходит для меня – soField
Если я понимаю, что вы хотите сделать правильно (если нет значения для статуса, использовать одну из предыдущей строки), вы должны посмотреть в использовании LAG и привести в сочетании с NVL/COALESCE
Вы должны предоставить столбец для сортировки, так что один знает, что «предыдущая» строка. Кроме того, вы должны задать свой вопрос здесь, используя некоторые примеры данных. Определение 'INSERT' и детального вывода в пастебине велико, как только вопрос будет ясен. –
Кроме того, ваши ВСТАВКИ полностью перепутаны. –
спасибо за информирование, исправленные инструкции вставки и заказы – soField