如何用insert或update在同一表中插入或更新多条记录

 
ssdhqydhcpdmInputYearMonthbdj1bdj1jdjtdj
38166100202200607100100120110
38144200101200607111.10.8
38166100202200706108108110110
381442001012007061.11.11.21.2
38166100202200707001080
38144200101200707001.10

 

我有一表a,结构如上,主键为:(ssdh,qydh,cpdm,InputYearMonth).

我在存储过程中,根据InputYearMonth=200706插入两条记录,并将InputYearMonth设置为200707(也就是复制上月记录,并将InputYearMonth设定为当前年月),并将jdj设定为上个月相应记录的(bdj1+bdj2)/2。现在问题是:如何将200707相应记录的tdj设置为200607相应记录的(bdj1+bdj2)/2


假如本月为200707月,那么我新插入一些记录,这些记录是根据上个月的记录生成的。比如倒数第二条记录
是根据倒数第4条记录生成。只是插入倒数第二条记录时,将InputYearMonth设定为当前月份,将jdj设定为倒数第四条记录bdj1和bdj2的算术平均值。

新插入记录的tdj是根据去年同期相应记录的bdj1和bdj2的算术平均值来确定的。比如倒数第二条记录(200707月)的tdj字段的值要由第一条记录(200607月)的bdj1和bdj2的算术平均值来确定。

 

我是如下实现的,能同时插入多条记录:

  1. insert into a 
  2.   select ssdh, qydh, cpdm,  '200707' as InputYearMonth ,0 as bdj1, 0 as bdj2, 
  3.      (bdj1+bdj2)/2as jdj, 
  4.      (
  5.      select top 1 (bdj1+bdj2)/2 
  6.      from a 
  7.      where InputYearMonth=convert(char(4),convert(int,left('200707',4))-1)+right('200707',2)
  8.            and ssdh=b.ssdh and qydh=b.qydh and cpdm=b.cpdm 
  9.      ) as tdj
  10.   from a  as b
  11.   where InputYearMonth='200706' and ssdh='38' and qydh='1'

同时跟新多条记录:

  1. update a 
  2. set tdj=(select top 1 (bdj1+bdj2)/2 from a 
  3.  where InputYearMonth=convert(char(4),convert(int,left('200707',4))-1)+right('200707',2) and ssdh=b.ssdh and qydh=b.qydh and cpdm=b.cpdm ) 
  4. from a as b 
  5. where InputYearMonth='200707' and ssdh='4303' and qydh='0002'

本问题讨论贴:

http://topic.csdn.net/u/20080909/10/d8e340ef-3656-478b-a4cb-1ba8bc821b49.html?seed=672223447

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值