Таблица слиться с собой - PullRequest
3 голосов
/ 24 ноября 2011

Я создал таблицу «Тест»

create table test
(
  id int identity(1,1) not null,
  correlation int,
  data varchar(max)
)

Ниже приведены данные таблицы

insert into test(correlation,data) values(1,'x0')
insert into test(correlation,data) values(1,'x1')
insert into test(correlation,data) values(2,'z1')
insert into test(correlation,data) values(2,'z2')
insert into test(correlation,data) values(3,'a')
insert into test(correlation,data) values(4,'b')
insert into test(correlation,data) values(5,'c')

Мне нужно отобразить данные на веб-странице и подключить таблицу к себе на корреляция и делать пейджинг

Например, если у меня есть две записи с одинаковой корреляцией (1), мне нужно отображать две строки как одну строку с данными как текущие данные и предыдущие данные. В приведенном ниже примере текущие данные будут х1, а предыдущие будут х0.

До

 Correlation  Data
    1         x0    
    1         x1    

* После 1014 *

Correlation     Previous Data   Current Data
1                  xo             x1

Если корреляция имеет только одну строку, предыдущая корреляция в результате будет нулевой.

В настоящее время я сделал пейджинг в Linq, и он работает, но я боюсь, что в будущем это будет стоить проблема производительности.

Может ли один и тот же помочь мне с SQL.

Есть ли другое хорошее решение для этой проблемы.

1 Ответ

2 голосов
/ 24 ноября 2011
;with C as
(
  select correlation,
         data,
         row_number() over(partition by correlation order by id desc) as rn
  from @test
  where SomeColumn > 10 -- Where clause goes here (if possible)
)  
select C1.correlation,
       C2.data as [Previous Data],
       C1.data as [Current Data]
from C as C1
  left outer join C as C2 
    on C1.correlation = C2.correlation and
       C2.rn = 2
where C1.rn = 1

Результат:

correlation Previous Data Current Data
----------- ------------- ------------
1           x0            x1
2           z1            z2
3           NULL          a
4           NULL          b
5           NULL          c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...