100分求一个SQL语句!!!!(100分)

  • 主题发起人 主题发起人 lmtree
  • 开始时间 开始时间
L

lmtree

Unregistered / Unconfirmed
GUEST, unregistred user!
要在MS SQL-SERVER 中
使用SQL语句将一个表中满足条件的某些字段的值复制到本表中一定条件的位置
记录数由条件决定,即可以一次复制多条记录。

如在一个工资表中,将所有人本月上余工资项数据用上月工资的下余项数据添入
而本月其他工资项数据都已设定.

updata 表1
set 字段名1=(select 字段名1 from 表1 where 条件1)
where 条件2

上面的SQL语句可以查出某字段的值,但对多条记录数一起修改就不行了。

各位大虾,有没有好办法?请教请教!
 
我也没有想出一句语句解决问题的方法,我的想法是这样
原来的表为a
生成临时表b的语句:
select * into b from a where month=上月的月份
然后
update a
set a.上余工资=b.下余工资
where a.姓名=b.姓名 and month=本月月份
 
update table1
set 上余工资=b.下余工资
from table1 a,table2 b where a.姓名=b.姓名 and a.month=本月月份
b.month = 本月的上月

瞎想的,没经过试验,你要用的话先做好备份,出问题了别怪我。
 
lhxu的建议很好,让我试试!
 
用游标
declare @name char(20)
declare MyCursor scroll cursor for select 姓名 from 工资表
open MyCursor
fetch first from MyCursor into @name,@xygz
while @@fetch_status=0
begin
update 工资表
set 上余工资=(selectm 下余工资 from 工资表 where 姓名=@name)
where 姓名=@name
fetch next from MyCursor into @name,@xygz
end
close MyCursor
deallocate MyCursor
将以上语句做一个存储过程

 
wrench:
小弟也想过用存储过程,但对存储过程不熟。
大虾能详解吗?
谢谢!
 
update 工资表
set a.上余工资=b.下余工资
from 工资表 a,工资表 b
where a.姓名=b.姓名 and a.month=本月 and b.month = 上月

 
churchill的方法可以:-)
 
"工资表"的主键应该是:"姓名"+"月份"

update "工资表" set "上余工资"=a2."下余工资"
from "工资表" a1,"工资表" a2
where a1."姓名"=a2."姓名" and a1."月份"=a2."月份"-1个月
 
update salarytable t1
set upsalary=
( select downsalary from salarytable t2
where month='01' and a.name=b.name)
where month='02'
这个SQL语句我测试过,没问题,能达到你的要求
 
谢谢各位提出宝贵意见。
但请注意条件:
我是要使用SQL语句将一个表中满足条件的某些字段的值
赋给本表中一定条件字段。记录数由条件决定,即可以一
次复制多条记录。
各位的办法我都看过,不太合适!
我最后还是用程序一条一条处理。
(可怜的网络资源倒霉了!!!!!)
 
是你例子举的不好, 再详细一些!
 
churchill的方法应该是对的,我经常这样写西西,
除非你的愿意非常怪异。
 
若有两个表A,B,当然象churchill所述。
但是在一个表!
我谢谢大家!
 
update 工资表
set a.上余工资=b.下余工资
from 工资表 a,工资表 b
where a.姓名=b.姓名 and a.month=本月 and b.month = 上月
只用了一个表"工资表", a,b只是它的两个别名!!!
:-)
 
多人接受答案了。
 
我的想法是用两个QUERY,一个用来提取数据,另一个用来写数据到目的表。没有试过,不知是否可行。

 
后退
顶部