27,580
社区成员
发帖
与我相关
我的任务
分享
if object_id('t1') is not null
drop table t1
go
create table t1 (id int identity (1,1),col2 decimal(3,1) )
insert into t1 select 2.5
union all select 6
union all select 7.2
union all select 5.1
union all select 10.5
go
select m.a,m.k,n.l from
(select row_number() over(order by id) as A,col2 as K,0 as L from t1 where id%2=1 ) m
join
(select row_number() over(order by id) as A,0 as K,col2 as L from t1 where id%2=0) n
on m.a=n.a
/*a k l
-------------------- --------------------------------------- ---------------------------------------
1 2.5 2.5
2 6.0 7.2
3 5.1 10.5
(3 行受影响)
*/
DECLARE @TB TABLE([A] INT, [B] DECIMAL(10,1))
INSERT @TB
SELECT 1, 2.5 UNION ALL
SELECT 2, 6 UNION ALL
SELECT 3, 7.2 UNION ALL
SELECT 4, 5.1 UNION ALL
SELECT 99, 24 UNION ALL
SELECT 100, 31
SELECT t.A,t.k,k.L
FROM (
select row_number() over(order by a) A, B as k ,0 as L from @TB where A%2=1) T JOIN
(select row_number() over(order by a) A,0 k ,B as L from @TB where A%2=0) K ON T.A=K.A
/*
(6 行受影响)
A k L
-------------------- --------------------------------------- ---------------------------------------
1 2.5 6.0
2 7.2 5.1
3 24.0 31.0
*/
DECLARE @TB TABLE([A] INT, [B] DECIMAL(10,1))
INSERT @TB
SELECT 1, 2.5 UNION ALL
SELECT 2, 6 UNION ALL
SELECT 3, 7.2 UNION ALL
SELECT 4, 5.1 UNION ALL
SELECT 99, 24 UNION ALL
SELECT 100, 31
SELECT t.A,t.k,k.L
FROM (
select A, B as k ,0 as L from @TB where A%2=1) T JOIN
(select a,0 k ,B as L from @TB where A%2=0) K ON T.A=K.A-1
(6 行受影响)
A k L
----------- --------------------------------------- ---------------------------------------
1 2.5 6.0
3 7.2 5.1
99 24.0 31.0
(3 行受影响)
DECLARE @TB TABLE([A] INT, [B] DECIMAL(10,1))
INSERT @TB
SELECT 1, 2.5 UNION ALL
SELECT 2, 6 UNION ALL
SELECT 3, 7.2 UNION ALL
SELECT 4, 5.1 UNION ALL
SELECT 99, 24 UNION ALL
SELECT 100, 31
;
with cte1 as
(
select *,id=row_number() over (order by a) from @tb t
)
select id=c2.A/2,c1.b k,c2.b l
from cte1 c1 left join cte1 c2 on c1.id+1=c2.id
where c1.id%2=1
/*
id k l
----------- --------------------------------------- ---------------------------------------
1 2.5 6.0
2 7.2 5.1
50 24.0 31.0
(3 行受影响)
*/
DECLARE @TB TABLE([A] INT, [B] DECIMAL(10,1))
INSERT @TB
SELECT 1, 2.5 UNION ALL
SELECT 2, 6 UNION ALL
SELECT 3, 7.2 UNION ALL
SELECT 4, 5.1 UNION ALL
SELECT 99, 24 UNION ALL
SELECT 100, 31
SELECT (A-1)/2+1 AS ID,
MAX(CASE WHEN (A-1)%2=0 THEN B END) AS K,
MAX(CASE WHEN (A-1)%2=1 THEN B END) AS L
FROM @TB
GROUP BY (A-1)/2+1
/*
ID K L
----------- ------------ ------------
1 2.5 6.0
2 7.2 5.1
50 24.0 31.0
*/