sql server 数据更新的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/21 05:41:26
sql server 数据更新的问题?
1、有两个表:d3,d4 d3表结构:档案号,姓名,工龄。d4表结构:档案号,姓名,年份,月份,工龄补贴。
问:能否让工龄补贴=工龄×8?如何做?
2、能否将d4表中2006年12月份的工龄补贴的数据复制到同表2007年1月份的工龄补贴中?如何做?

以下sql我都假定楼主以“档案号”区分每个人的唯一性...

1、分两种情况 楼主自己选择吧(假设楼主都要更新的是2006年12月的)
1) 当d4表没有某月记录需要insert时:
insert into d4 (档案号,姓名,年,月,工龄补贴) select 档案号,姓名,2006,12,工龄 * 8 from d3
2) 当d4表已有某月记录需要单独更新工龄补贴字段时:
update d4 set d4.工龄补贴=d3.工龄 * 8 from d3,d4 where d3.档案号=d4.档案号 and d4.年=2006 and d4.月=12

2、
update d4 set d4.工龄补贴=d4_612.工龄补贴 from (select 档案号,工龄补贴 from d4 where 年=2006 and 月=12) as d4_612 where d4_612.档案号=d4.档案号 and d4.年=2007 and d4.月=1

有关“d4_612”:
d4_612是一个子查询,就是update语句里的这个部分“(select 档案号,工龄补贴 from d4 where 年=2006 and 月=12) as d4_612”,可以看到这个子查询里where后面的条件是“年=2006 and 月=12”,所以其作用就很明显了——在d4表中找到2006年12月的记录,找到的这些记录将作为update语句更新的数据来源表,并且将找到的这些记录的结果表暂时命名为“d4_612”。
后面的“where d4_612.档案号=d4.档案号 and d4.年=2007 and d4.月=1”中的“d4_612.档案号=d4.档案号”指明了更新时目的表——d4和数据来源表——d4_612的记录对应关系;“and d4.年=2007 and d4.月=1”限定了只更新d4表中2007年1月份的