2013-09-09 2 views
2

Я использую solution from @peterm , и он работает.Как получить следующий/предыдущий номер записи? (Часть 2)

Но Я еще один вопрос, как я могу получить результат, как показано ниже:

Name | SO No. | Previous SO | Previous SO Details 
    --------------------------------------------------- 
    Adrian | SO-00005 | SO-00002 | details SO-00002 

Образец данных:

Name | SO No. | SO Details 
------------------------------------ 
Adrian | SO-00001 | details SO-00001 
Adrian | SO-00002 | details SO-00002 
Bianca | SO-00003 | details SO-00003 
Carrie | SO-00004 | details SO-00004 
Adrian | SO-00005 | details SO-00005 
Bianca | SO-00006 | details SO-00006 
Adrian | SO-00007 | details SO-00007 

SqlFiddle

+0

Где находится предыдущее поле с такой информацией? –

+0

В той же колонке таблицы, что и «детали». Вот демонстрация: http://sqlfiddle.com/#!3/03c47/2 – Anmi

+0

Извините, я изменил свой вопрос, и я забыл отметить, какой результат я хочу ... – Anmi

ответ

1

Вот один из способов достижения этой цели :

with CTE_table_1 as(
    select name 
     , so_no 
     , details 
     , row_number() over(partition by name 
          order by so_no) as rn 
    from table1 
) 
select name 
    , so_no 
    , (select max(so_no) 
      from cte_table_1 q 
     where q.rn = s.rn - 1 -- here you can regulate how far back you want to go 
      and s.name = q.name) as prev_so_no 
    , details 
    , (select max(details) 
      from cte_table_1 q 
     where q.rn = s.rn - 1 
      and s.name = q.name) as prev_details 
    from cte_table_1 s 

SQLFiddle Demo #1

SQLFiddle Demo #2

+0

Извините, я изменил свой вопрос. И есть главный ключ «SO No» только – Anmi

+0

Взгляните на [* SQLFiddle Demo # 2 *] (http://sqlfiddle.com/#!3/03c47/53) –

0

в Sql Server 2012 новая функция добавления, которая называется окно функции лаг и свинец. Они могут показывать ваш предыдущий или следующий результат агрегатных функций. ;)

+0

Спасибо, что ответили. Поскольку я использую SQL Server 2008 и не имею этой функции – Anmi

+0

Моя идея состоит в том, что вы должны объявить временную таблицу, чтобы сохранить предыдущий результат, а в цикле while значение курсора на 1 меньше основного в курсоре. то вы можете показать предыдущий. –

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