2015-07-17 7 views
0

У меня есть таблица истории, где я хочу вернуть ТОЛЬКО первое значение STATUS, которое не является нулевым (если оно есть). У меня мало опыта ORACLE, и я искал это, но не смог найти ничего, что мне нужно.ORACLE найти первое ненулевое значение из таблицы истории

РЕДАКТИРОВАТЬ Пример моей таблице ниже.

ITEM NAME STATUS 
Item1 Test1 Null 
Item1 Test2 Null 
Item1 Test3 Approved 
Item2 Test1 Null 
Item2 Test2 Approved 

В приведенном выше примере я бы ТОЛЬКО хотел бы вернуть следующие строки.

Item1 Test3 Approved 
Item2 Test2 Approved 

Заранее благодарен.

+0

Я думаю, что у вас есть некий неявный порядок в вашей выборке вывода, и вы должны были включить это в свой вопрос. –

ответ

1

Я думаю, что вы имеете в виду: Для каждого значения элемента, порядок строк с не-NULL по имени и взять первый. Если это правильно:

SELECT * FROM (
    SELECT 
    item, name, status, 
    row_number() OVER (PARTITION BY item ORDER BY name) AS rn 
    FROM t 
    WHERE status is NOT NULL 
) 
WHERE rn = 1 
+0

Отлично, спасибо! –

1

Вы не указали, что вы имеете в виду под «первым» (заказывается как?), Так что это будет делать:

SELECT * 
FROM t 
WHERE status IS NOT NULL 
AND ROWNUM = 1; 
+0

Извинения, я редактировал свой первоначальный вопрос. Я хотел бы, чтобы первое значение «STATUS», которое не равно null, должно быть возвращено для всех элементов в таблице. Я также отредактировал свой пример. –

0

Обратившись @ ответ WW, в случае, если вы хотите, чтобы вернуть все элементы, то только изменить следующим образом (т.е. удалить rownum состояние)

SELECT * 
FROM t 
WHERE status IS NOT NULL;