注册 登录
编程论坛 SQL Server论坛

请求关于多条记录跟新的问题。。。。

moyou333 发布于 2010-09-16 10:02, 743 次点击
我要修改一张表里多条记录的多个列的数据,数据是经过两张表关联计算出来的,我这样写,但出错,请高手帮助
update gr001001 set tzjsgj='"&tzjsgj1&"',tzjsgh='"&tzjsgh1&"',tzcljsgj='"&tzcljsgj1&"',tzcljsgh='"&tzcljsgh1&"' where rekey in(
select tu.dwbm,tu.cjrq,tu.swh,tu.xmid,tu.rekey,tw.jsgj/tu.zjsgj*tw.jstzgj2 as tzjsgj1,jsgj/tu.zjsgj*tw.jstzgj2/js as tzjsgh1, tw.cljsgj/tu.zjsgj*tw.jstzgj2 as tzcljsgj1,tw.cljsgj/tu.zjsgj*tw.jstzgj2/cljs as tzcljsgh1 from (
select gr1.dwbm,gr1.xmid,gr1.swh,sum(jsgj)+sum(cljsgj) as zjsgj ,gr1.cjrq ,gr1.rekey from gr001001 gr1 where gr1.cjrq between '2010-7-1' and '2010-9-18'group by gr1.cjrq,gr1.xmid,gr1.dwbm,gr1.swh,gr1.rekey)tu
left join (select dw.dwbm as dwbm1,dw.cjrq as cjrq1,dw.dwmc as dwmc1,dw.jstzgj2,gr.cjrq,gr.dwbm,gr.dwmc,gr.xmid,gr.rekey,gr.swh,gr.jsgj,gr.cljsgj,gr.js,gr.cljs from dwsj dw
 left join gr001001 gr on dw.dwbm=gr.dwbm and dw.cjrq=gr.cjrq where dw.cjrq between '2010-7-1' and '2010-9-18') tw on tu.dwbm=tw.dwbm1 and tu.xmid=tw.xmid and tu.swh=tw.swh and tu.cjrq=tw.cjrq
)

服务器: 消息 116,级别 16,状态 1,行 1
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
9 回复
#2
moyou3332010-09-16 10:13
大家帮我一下
#3
moyou3332010-09-16 11:00
。。。。。。。。。。。。。。。。。。。帮我呀
#4
aei1352010-09-16 11:03
in后面的子查询只能有一个列名,不能那么多列名的
这样试试
update gr001001
set tzjsgj='"&tzjsgj1&"',tzjsgh='"&tzjsgh1&"',tzcljsgj='"&tzcljsgj1&"',tzcljsgh='"&tzcljsgh1&"'
where rekey in(
    select tu.rekey from (
    select gr1.dwbm,gr1.xmid,gr1.swh,sum(jsgj)+sum(cljsgj) as zjsgj ,gr1.cjrq ,gr1.rekey from gr001001 gr1
    where gr1.cjrq between '2010-7-1' and '2010-9-18'group by gr1.cjrq,gr1.xmid,gr1.dwbm,gr1.swh,gr1.rekey
     )tu
    left join (select dw.dwbm as dwbm1,dw.cjrq as cjrq1,dw.dwmc as dwmc1,dw.jstzgj2,gr.cjrq,gr.dwbm,gr.dwmc,gr.xmid,gr.rekey,gr.swh,gr.jsgj,gr.    cljsgj,gr.js,gr.cljs from dwsj dw
    left join gr001001 gr on dw.dwbm=gr.dwbm and dw.cjrq=gr.cjrq
    where dw.cjrq between '2010-7-1' and '2010-9-18') tw on tu.dwbm=tw.dwbm1 and tu.xmid=tw.xmid and tu.swh=tw.swh and tu.cjrq=tw.cjrq
)
#5
moyou3332010-09-16 11:38
但我要修改里面的数据tzjsgj='"&tzjsgj1&"',tzjsgh='"&tzjsgh1&"',tzcljsgj='"&tzcljsgj1&"',tzcljsgh='"&tzcljsgh1&"'这个要怎样修改 得了呢,能否提供解决方法,谢谢
#6
moyou3332010-09-16 14:09
谁帮帮我呀。。。。。。。。。。。
#7
dwmax2010-09-16 14:45
条件错误,in 后面的查询只能为一列 不能多列,你说要修改多个字段,你修改的值是固定值还是从相关联的表中取值?

#8
moyou3332010-09-16 14:51
我要修改的值是从相关联的表中的值
#9
moyou3332010-09-16 15:43
谁会的帮帮我呀。。。。。。。。
#10
aei1352010-09-17 09:32
这样看看,你的句子实在写得让人看起来头晕
update gr001001 set tzjsgj='"&tw.jsgj/tu.zjsgj*tw.jstzgj2&"',tzjsgh='"&jsgj/tu.zjsgj*tw.jstzgj2/js&"',tzcljsgj='"&tw.cljsgj/tu.zjsgj*tw.jstzgj2&"',tzcljsgh='"&tw.cljsgj/tu.zjsgj*tw.jstzgj2/cljs&"'
from (
select gr1.dwbm,gr1.xmid,gr1.swh,sum(jsgj)+sum(cljsgj) as zjsgj ,gr1.cjrq ,gr1.rekey from gr001001 gr1 where gr1.cjrq between '2010-7-1' and '2010-9-18'group by gr1.cjrq,gr1.xmid,gr1.dwbm,gr1.swh,gr1.rekey)tu
left join (select dw.dwbm as dwbm1,dw.cjrq as cjrq1,dw.dwmc as dwmc1,dw.jstzgj2,gr.cjrq,gr.dwbm,gr.dwmc,gr.xmid,gr.rekey,gr.swh,gr.jsgj,gr.cljsgj,gr.js,gr.cljs from dwsj dw
left join gr001001 gr on dw.dwbm=gr.dwbm and dw.cjrq=gr.cjrq where dw.cjrq between '2010-7-1' and '2010-9-18') tw on tu.dwbm=tw.dwbm1 and tu.xmid=tw.xmid and tu.swh=tw.swh and tu.cjrq=tw.cjrq

1