数据库数据批量赋值(把满足条件的下一条记录中的一个值给上一个记录) ( 积分: 100 )

  • 主题发起人 主题发起人 motorola168
  • 开始时间 开始时间
M

motorola168

Unregistered / Unconfirmed
GUEST, unregistred user!
我的数据库有字段<br>字段1&nbsp;&nbsp;字段2&nbsp;&nbsp;字段3&nbsp;&nbsp;字段4&nbsp;&nbsp;字段5&nbsp;&nbsp;字段6<br>&nbsp;111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;&nbsp;&nbsp;&nbsp;aa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wss&nbsp;&nbsp;&nbsp;a2a&nbsp;&nbsp;&nbsp;&nbsp;2<br>&nbsp;111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w2s&nbsp;&nbsp;&nbsp;42d&nbsp;&nbsp;&nbsp;&nbsp;3<br>&nbsp;121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;&nbsp;&nbsp;&nbsp;aa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wss&nbsp;&nbsp;&nbsp;a2a&nbsp;&nbsp;&nbsp;&nbsp;2<br>&nbsp;102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w2s&nbsp;&nbsp;&nbsp;42d&nbsp;&nbsp;&nbsp;&nbsp;3<br>由于数据比较多,我想实现用一个SQL语句实现<br>当字段1,字段2的值相等并且字段6的值相差为1时就把字段6比较小的那个字段5的值给下面数据的字段4<br>也就是想实现如下效果:(和上面数据对比)<br>字段1&nbsp;&nbsp;字段2&nbsp;&nbsp;字段3&nbsp;&nbsp;字段4&nbsp;&nbsp;字段5&nbsp;&nbsp;字段6<br>&nbsp;111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;&nbsp;&nbsp;&nbsp;aa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa&nbsp;&nbsp;&nbsp;&nbsp;a2a&nbsp;&nbsp;&nbsp;&nbsp;2<br>&nbsp;111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a2a&nbsp;&nbsp;&nbsp;42d&nbsp;&nbsp;&nbsp;&nbsp;3<br>&nbsp;121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;&nbsp;&nbsp;&nbsp;aa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa&nbsp;&nbsp;&nbsp;&nbsp;a2a&nbsp;&nbsp;&nbsp;&nbsp;2<br>&nbsp;102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w2s&nbsp;&nbsp;&nbsp;42d&nbsp;&nbsp;&nbsp;&nbsp;3
 
update&nbsp;b&nbsp;set&nbsp;c4&nbsp;=&nbsp;a.c5&nbsp;<br>from&nbsp;tb&nbsp;a,&nbsp;tb&nbsp;b&nbsp;<br>where&nbsp;a.c1=b.c1&nbsp;and&nbsp;a.c2=b.c2&nbsp;and&nbsp;a.c6=b.c6-1
 
Use&nbsp;Cursor
 
s00000000001
 
Cow!看不明!Use&nbsp;Cursor&nbsp;Too!
 
没看明白,不过我想用case一定能实现
 
还是使用游标吧&nbsp;先提取数据,然后把符合条件的赋值,多设置几个变量
 
表该有个主键吧<br>假设是MyID<br>declare&nbsp;@MyID&nbsp;sql_varaint&nbsp;,@fld1&nbsp;varchar(50),@fld2&nbsp;int,,@fld4&nbsp;varchar(50),@fld5&nbsp;varchar(50),@fld6&nbsp;varchar(50)<br>declare&nbsp;@tempMy&nbsp;sql_varaint,ID@temp1&nbsp;varchar(50),@temp2&nbsp;int,,@temp4&nbsp;varchar(50),@temp5&nbsp;varchar(50),@temp6&nbsp;varchar(50)<br><br>declare&nbsp;Cur_1&nbsp;cursor&nbsp;for<br>AS<br>select&nbsp;MyID,字段1,字段2,字段4,字段5,字段6&nbsp;from&nbsp;Tbl<br><br>open&nbsp;Cur_1<br><br>fetch&nbsp;first&nbsp;into&nbsp;@tempMyID,@temp1,@temp2,,@temp4,@temp5,@temp6&nbsp;<br><br>while&nbsp;@@Fetch_Status=0<br>begin<br>if&nbsp;(@temp1=@fld1)&nbsp;AND&nbsp;(@fld2-@temp2=1)&nbsp;<br>begin<br>&nbsp;if&nbsp;@tempMyID&lt;@myID&nbsp;<br>&nbsp;&nbsp;&nbsp;select&nbsp;@temp5=@fld5,@tempMyID=@MyID&nbsp;<br><br>&nbsp;update&nbsp;T&nbsp;<br>&nbsp;set&nbsp;T.字段4=@fld5<br>&nbsp;where&nbsp;T.MyID=@tempMyID<br>&nbsp;end&nbsp;<br><br>select&nbsp;@tempMyID=@MyID,@temp1=@fld1,@temp2=@fld2,@temp4=@fld4,,@temp5=@fld5,@temp6=@fld6<br>end<br><br>fetch&nbsp;next&nbsp;into&nbsp;@MyID,@fld1,@fld2,,@fld4,@fld5,@fld6&nbsp;<br>end<br>close&nbsp;Cur_1<br>deallocate&nbsp;Cur_1
 
后退
顶部