标题:SQL 同表更新语句写法
只看楼主
hllsmart
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-7-16
 问题点数:0 回复次数:8 
SQL 同表更新语句写法
我在sqlserver2000里有一个表A 里面有三个列:日期,工号,出勤其中日期,工号为主键,如果要把某行的出勤值值更新到另外一行,这个语句应该怎么写?忘大神们指导一下,谢谢
2014-07-16 15:33
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
得分:0 
不明白你讲的啥? 一点业务逻辑都没有

大家都是朋友,有空就来坐坐!
2014-07-17 13:52
z060831
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2013-8-3
得分:0 
你是想这样吗?
UPDATE A
SET 出勤=b.出勤
FROM (
SELECT 日期,工号,出勤
FROM A
WHERE 工号=?
) b
where b.工号=A.工号
2014-07-18 11:01
hllsmart
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-7-16
得分:0 
回复 2 楼 volte
表名"出勤",里面有列:日期,工号,出勤时间,日期和工号列为表主键,表里的记录分别是从每个月的1号到月底的日期和工号,然后出勤时间为每天的出勤小时,我想把表里其中的两天(比如:7月14日跟7月15日)的出勤时间对调一下,这个更新语句应该怎么写?谢谢版主
2014-07-22 11:30
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
得分:0 
你这个交换同一个表中的数据,有两种方法:1,需要借助一个中间变量然后通过游标实现或者;  2 借助临时用表实现;
以下暂只介绍第二种方法,第一种自己思考
假设出勤表名称为OnDuty
1,第一步将7月15日数据转移到临时表OnDuty20140715
select * into OnDuty20140715 where DutyDate = '2014-07-15'
2,第二步将7月15日出勤时间替换为7月14号的出勤时间
update A set A.出勤时间=B.出勤时间
from OnDuty A inner join OnDuty B on A.工号=B.工号 where A.日期=‘2014-07-15' and B.日期='2014-07-14'
3,第三步将7月14号出勤时间替换为7月15号的出勤时间
update A Set A.出勤时间=B.出勤时间
from OnDuty A inner join OnDuty20140715 B on A.工号=B.工号 where A.日期='2014-07-14'
4,第四步drop临时用表
drop table OnDuty20140715

大家都是朋友,有空就来坐坐!
2014-07-22 15:12
hllsmart
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-7-16
得分:0 
我一直用第二中方法,就是觉得第二中方法太麻烦了,想有一个快捷的更新语句实现它,看来这种方法不可取因为我一直想不到有什么等值可以借助的,第一种方法用游标的话是借助存储过程吗?
2014-07-22 17:13
mxbing1984
Rank: 7Rank: 7Rank: 7
来 自:贵州道真
等 级:贵宾
威 望:37
帖 子:73
专家分:342
注 册:2014-8-8
得分:0 
回复 楼主 hllsmart
把日期7号变成6号,6号变成7号
Update #T
Set D=Case D When '2014-05-06' Then '2014-05-07'
             When '2014-05-07' Then '2014-05-06'
       End
Where D    in('2014-05-06','2014-05-07')

天再高,踮起脚尖就能更接近阳光
2014-08-08 11:24
jichabc
Rank: 2
等 级:论坛游民
威 望:2
帖 子:26
专家分:36
注 册:2011-3-30
得分:0 
如果你是用存储过程来实现其实很简单!办法如下:

一、传递日期1,日期2 参数(对调的2日期)
二、查询日期1并改成9999-9-9 特定日期
三、查询日期2并改成日期1
四、查询特定日期(9999-9-9)并改成日期2
完事!
难的不是语法而是解决方案!
2014-08-13 23:04
mxbing1984
Rank: 7Rank: 7Rank: 7
来 自:贵州道真
等 级:贵宾
威 望:37
帖 子:73
专家分:342
注 册:2014-8-8
得分:0 
回复 8 楼 jichabc
把我的2014-05-06换成@A,2014-05-07换成@B,一句sql就搞定了,为啥米还要Update3次?

天再高,踮起脚尖就能更接近阳光
2014-08-14 11:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434093-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.147845 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved