日期:2014-05-17  浏览次数:20447 次

相同列的两个数值对调
有一个表有id,姓名,日期,和上班时间。上班时间由星期一到星期六,星期六算加班,星期一到星期五的上班时间去最小的值跟星期六上班时间对调!
例如:
tid  tname   tdate      thour
1    allen   2009-3-2   3.5
2    allen   2009-3-3   5
3    allen   2009-3-4   7
4    allen   2009-3-5   8
5    allen   2009-3-6   4
6    allen   2009-3-7   6

7    bill   2009-3-2   5
8    bill   2009-3-3   6
9    bill   2009-3-4   3
10   bill   2009-3-5   8
11   bill   2009-3-6   8
12   bill   2009-3-7   6
根据上表,名字为allen的要把星期一(2009-3-2)和星期六(2009-3-7)对调,星期一的上班时间为6小时,星期六的上班时间为3.5小时;
名字为bill的要把星期三(2009-3-4)和星期六(2009-3-7)对调,星期一的上班时间为6小时,星期六的上班时间为3.5小时;
需要计算一个月的数据
------最佳解决方案--------------------
引用:
引用:
楼上的,你好象没考虑数据是否是同一周的. 
 
如果一周是跨年度的,周一和周六不在同一年的话......


if object_id('tb') is not null drop table tb
go
create table tb(tid int, tname varchar(10), tdate datetime, thour decimal(18,1))
insert into tb values(1 ,   'allen' , '2009-3-2' , 3.5) 
insert into tb values(2 ,   'allen' , '2009-3-3' , 5 )
insert into tb values(3 ,   'allen' , '2009-3-4' , 7 )
insert into tb values(4 ,   'allen' , '2009-3-5' , 8 )
insert into tb values(5 ,   'allen' , '2009-3-6' , 4 )
insert into tb values(6 ,   'allen' , '2009-3-7' , 6 )
insert into tb values(13 ,   'allen' , '2009-3-9' , 3.5) 
insert into tb values(14 ,   'allen' , '2009-3-10', 3.5 )
insert into tb values(15 ,   'allen' , '2009-3-11' , 7 )
insert into tb values(16 ,   'allen' , '2009-3-12' , 8 )
insert into tb values(17,   'allen' , '2009-3-13' , 4 )
insert into tb values(18,   'allen' , '2009-3-14' , 6 )
insert into tb values(19 ,   'allen' , '2008-12-1' , 3.5) 
insert into tb values(20 ,   'allen' , '2008-12-2', 3.5 )
insert into tb values(21 ,   'allen' , '2008-12-3' , 7 )
insert into tb values(22 ,   'allen' , '2008-12-4' , 8 )
insert into tb values(23,   'allen' , '2008-12-5' , 4 )
insert into tb values(24,   'allen' , '2008-12-6' , 6 )<