表合并到自身

时间:2011-11-24 13:01:11

标签: c# sql tsql

我创建了一个表“Test”

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)我需要 将两行显示为一行,数据为“当前数据”和“以前的数据”。 在下面的示例中,当前数据将是x1,而之前的数据将是x0。

之前

 Correlation  Data
    1         x0    
    1         x1    

Correlation     Previous Data   Current Data
1                  xo             x1

如果相关只有一行,那么结果中的先前相关将为空。

Currenly我在Linq做了分页并且它正在工作,但我担心将来它会花费 性能问题。

同一个人可以帮助我使用SQL。

这个问题是否有其他好的解决方案。

1 个答案:

答案 0 :(得分:2)

;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