2014-10-20 2 views
-1

Я использую следующий код, чтобы соответствовать строки по номеру:SQL - Создание иерархии в PARTITION BY заявления

SELECT *, 
    LEAD(ORDER, 1) OVER(PARTITION BY ID_NBR) AS PREV_ORDER 
FROM TABLE 

В моих данных, некоторые идентификационные номера отсутствуют. Если (и только если) идентификационный номер отсутствует, я хотел бы сопоставить строки по Cust_Name. Возможно ли это с помощью команд LEAD/OVER?

Thanks,

+0

отсутствует, значит, что они являются NULL? – radar

+0

Поле ID_NBR пусто. – waealu

+0

Можете ли вы определить «матч»? Что такое 'cust_name'? Откуда этот столбец «порядок»? Вы знаете, что 'order' - это недопустимое имя столбца, некорректное, как у вас есть? Это может облегчить задачу, если вы разместили образец своих исходных данных, а затем еще один образец данных, который вы хотите, вместе с полным, логичным описанием того, как кто-то трансформировался в другой. – Ben

ответ

0

Возможно, вам нужно что-то вроде этого?

with tab as (
select 1 id, 'n1' cust_name from dual 
union all select 2, 'n2' from dual 
union all select null, 'n3' from dual 
union all select 4, 'n4' from dual 
) 
select id, cust_name, 
      lag(cust_name ignore nulls) over(order by id) prev_name, 
      lead(cust_name ignore nulls) over(order by id) next_name 
from tab; 

IGNORE NULLS - пропускает значения NULL при поиске значений задержки/свинца.

Вы можете добавить "PARTITION BY седловине [, цв]" перед ORDER BY

Это важно иметь ORDER BY с LAG/LEAD функций