22,182
社区成员




create table tb(person varchar(10) , ttime varchar(10) , Iotype int)
insert into tb values('001', '08:00', 1 )
insert into tb values('001', '12:00', 2 )
insert into tb values('001', '13:00', 1 )
insert into tb values('001', '17:00', 2 )
insert into tb values('002', '08:00', 1 )
insert into tb values('002', '12:00', 2 )
go
select person ,
max(case (px-1) % 2 when 0 then ttime else '' end ) [in],
max(case (px-1) % 2 when 1 then ttime else '' end ) [out]
from
(
select * , px = (select count(1) from tb where person = t.person and ttime < t.ttime) + 1 from tb t
) m
group by person , (px-1)/2
order by person , [in]
/*
person in out
---------- ---------- ----------
001 08:00 12:00
001 13:00 17:00
002 08:00 12:00
(所影响的行数为 3 行)
*/
select Wpid = (select count(1) from
(
select person ,
max(case (px-1) % 2 when 0 then ttime else '' end ) [in],
max(case (px-1) % 2 when 1 then ttime else '' end ) [out]
from
(
select * , px = (select count(1) from tb where person = t.person and ttime < t.ttime) + 1 from tb t
) m
group by person , (px-1)/2
) t1 where t1.person < t2.person or (t1.person = t2.person and t1.[in] < t2.[in])
) + 1 , t2.* from
(
select person ,
max(case (px-1) % 2 when 0 then ttime else '' end ) [in],
max(case (px-1) % 2 when 1 then ttime else '' end ) [out]
from
(
select * , px = (select count(1) from tb where person = t.person and ttime < t.ttime) + 1 from tb t
) m
group by person , (px-1)/2
) t2
order by wpid
/*
Wpid person in out
----------- ---------- ---------- ----------
1 001 08:00 12:00
2 001 13:00 17:00
3 002 08:00 12:00
(所影响的行数为 3 行)
*/
drop table tb
create table tb(person varchar(10) , ttime varchar(10) , Iotype int)
insert into tb values('001', '08:00', 1 )
insert into tb values('001', '12:00', 2 )
insert into tb values('001', '13:00', 1 )
insert into tb values('001', '17:00', 2 )
insert into tb values('002', '08:00', 1 )
insert into tb values('002', '12:00', 2 )
go
select person ,
max(case (px-1) % 2 when 0 then ttime else '' end ) [in],
max(case (px-1) % 2 when 1 then ttime else '' end ) [out]
from
(
select * , px = (select count(1) from tb where person = t.person and ttime < t.ttime) + 1 from tb t
) m
group by person , (px-1)/2
order by person , [in]
drop table tb
/*
person in out
---------- ---------- ----------
001 08:00 12:00
001 13:00 17:00
002 08:00 12:00
(所影响的行数为 3 行)
*/