在Delphi版 关于这个问题:
http://expert.csdn.net/Expert/topic/3041/3041729.xml?temp=.2629206

解决方案 »

  1.   

    --学号是连续的吗?如果是:
    select 学号1=a.学号,姓名1=a.姓名,地址1=a.地址
    ,学号2=b.学号,姓名2=b.姓名,地址2=b.地址
    from 表 a 
    left join 表 b on a.学号+1=b.学号 and (a.学号-1)%2=0
      

  2.   

    --如果学号不连续,就用
    select 学号1=a.学号,姓名1=a.姓名,地址1=a.地址
    ,学号2=b.学号,姓名2=b.姓名,地址2=b.地址
    from 表 a left join 表 b on 
    (select count(*) from 表 where 学号<=a.学号)+1
    =(select count(*) from 表 where 学号<=b.学号)
    where ((select count(*) from 表 where 学号<=a.学号)-1)%2=0
      

  3.   

    --测试--测试数据
    create table 表(学号 int,姓名 varchar(10),地址 varchar(10))
    insert 表 select 1,'N1','add1'
    union all select 2,'N2','add2'
    union all select 3,'N3','add3'
    union all select 4,'N4','add4'
    union all select 5,'N4','add5'
    union all select 6,'N6','add6'
    go--学号是连续的吗?如果是:
    select 学号1=a.学号,姓名1=a.姓名,地址1=a.地址
    ,学号2=b.学号,姓名2=b.姓名,地址2=b.地址
    from 表 a 
    left join 表 b on a.学号+1=b.学号 and (a.学号-1)%2=0--如果学号不连续,就用
    select 学号1=a.学号,姓名1=a.姓名,地址1=a.地址
    ,学号2=b.学号,姓名2=b.姓名,地址2=b.地址
    from 表 a left join 表 b on 
    (select count(*) from 表 where 学号<=a.学号)+1
    =(select count(*) from 表 where 学号<=b.学号)
    where ((select count(*) from 表 where 学号<=a.学号)-1)%2=0
    go--删除测试
    drop table 表/*--测试结果学号1         姓名1        地址1        学号2         姓名2        地址2        
    ----------- ---------- ---------- ----------- ---------- ---------- 
    1           N1         add1       2           N2         add2
    3           N3         add3       4           N4         add4
    5           N4         add5       6           N6         add6(所影响的行数为 3 行)
    学号1         姓名1        地址1        学号2         姓名2        地址2        
    ----------- ---------- ---------- ----------- ---------- ---------- 
    1           N1         add1       2           N2         add2
    3           N3         add3       4           N4         add4
    5           N4         add5       6           N6         add6(所影响的行数为 3 行)
    --*/