2014-11-01 2 views
0

В приведенной ниже таблице представлено, что у клиента есть транспортное средство с 2000 по 20XX. Я пытаюсь создать вывод из приведенной ниже таблицы, так что, поскольку клиент имеет транспортное средство с 2000 по 2001 год, он автоматически передается в следующем году, т.е. с 2002 по 2003 год и т. Д. Я попытался использовать аналитическую функцию с запаздыванием, но он может перейти к следующий ряд только.Oracle SQL каскадирует информацию по нескольким строкам

Просьба указать руководство, если оно может реализовать этот каскадный эффект без хранимой процедуры.

customer vehicle start end 
-------------------------------------- 
A   0  2000 2001 
A   1  2002 2003 
A   1  2003 2004 
A   0  2004 2015 .....contd 

Ожидаемый результат

customer vehicle start end 
------------------------------------ 
A   0  2000 2001 
A   1  2002 2003 
A   2  2003 2004 
A   2  2004 2005 ...contd 

ответ

1

ли это то, что вы хотите?

select customer, 
     max(vehicle) over (partition by customer order by start) as vehicle, 
     start, end 
from table t; 

Если вы хотите накопленную сумму (которую я уверен, что не было в оригинальном queation), просто использовать sum() вместо max():

select customer, 
     sum(vehicle) over (partition by customer order by start) as vehicle, 
     start, end 
from table t; 
+0

Нет, я хочу reslt в первом ряду добавьте во вторую строку и новое значение второй икры к третьей строке .. и т. д., например, каскадный – Awknewbie

+0

спасибо, гордон, позвольте мне проверить это. Я всегда думал, что сумма с аналитической функцией будет давать только сумму всех значений в определенном разделе во всех строках – Awknewbie

+0

@Awknewbie. , , При условии 'order by' он превращается в кумулятивную сумму. –

Смежные вопросы