22,210
社区成员
发帖
与我相关
我的任务
分享
SELECT M.a a,M.b b,N.a c,N.b d
FROM(
select a,b ,ROW_NUMBER()OVER(ORDER BY GETDATE()) ROW from #T1 t1)M
INNER JOIN
(select a,b ,ROW_NUMBER()OVER(ORDER BY GETDATE()) ROW from #T1 t1)N
ON M.ROW+1=N.ROW
WHERE m.row % 2=1 AND n.row %2=0
a b c d
----------- ---- ----------- ----
1 张三 2 李四
3 王五 4 赵六
(2 row(s) affected)
DECLARE @t TABLE (id int,xm char(20))
INSERT @t SELECT 1,'张三'
UNION ALL SELECT 2,'李四'
UNION ALL SELECT 3,'王五'
UNION ALL SELECT 4,'赵六'
SELECT a.id,a.xm,
(SELECT id FROM @t WHERE id = a.id + 1 ) AS id,
(SELECT xm FROM @t WHERE id = a.id + 1 ) AS xm
FROM @t a
WHERE a.id %2 <>0
(4 行受影响)
id xm id xm
----------- -------------------- ----------- --------------------
1 张三 2 李四
3 王五 4 赵六
(2 行受影响)
--sql 2000
select
max(case (px - 1)%2 when 0 then 学生ID end) 学生ID,
max(case (px - 1)%2 when 0 then 姓名 end) 姓名,
max(case (px - 1)%2 when 1 then 学生ID end) 学生ID,
max(case (px - 1)%2 when 1 then 姓名 end) 姓名
from
(
select t.* , px = (select count(1) from 学生 where 学生ID < t.学生ID) + 1 from 学生 t
) m
group by (px - 1)/2
--sql 2005
select
max(case (px - 1)%2 when 0 then 学生ID end) 学生ID,
max(case (px - 1)%2 when 0 then 姓名 end) 姓名,
max(case (px - 1)%2 when 1 then 学生ID end) 学生ID,
max(case (px - 1)%2 when 1 then 姓名 end) 姓名
from
(
select t.* , px = row_nubmer() over(order by 学生ID) from 学生 t
) m
group by (px - 1)/2
--> 测试数据: #T1
if object_id('tempdb.dbo.#T1') is not null drop table #T1
create table #T1 (a int,b varchar(4))
insert into #T1
select 1,'张三' union all
select 2,'李四' union all
select 3,'王五' union all
select 4,'赵六'
select *
from #T1 t1
join #T1 t2 on t1.a+2=t2.a
a b a b
----------- ---- ----------- ----
1 张三 3 王五
2 李四 4 赵六
(2 行受影响)