问题如下,随便举的例子:
仓库统计表:storgeCount(sDateMonth,storgeNo,objectKind, objectNo,)
在库管理表:factoryNow(fDateMonth,objectNo,storgeNo,objetcCountNum)
在仓库统计表中根据统计年月sDateMonth查出一组以员工编号eno分组的记录
Select A.sDateMonth, A.storgeNo, A.objectKind, A.objectNo, count(A.objectNo) from storgeCount A where A.sDateMonth=’YYYY/MM’ group by A.objectNo
如:
A.sDateMonth  storgeNo objectKind objectNo count(A.objectNo)
2007/09 001 1 1001 8
2007/09 001 1 1002 15
2007/09 001 2 2002 12
2007/09 002 3 3001 18
… 然后利用查询出来的结果集中的每条数据来对在库管理表进行更新操作
比如依次将
fDateMonth=’ 2007/09’, objectNo=’ 1001’, storgeNo=’001’,objetcCountNum=8
fDateMonth=’ 2007/09’, objectNo=’ 1002’, storgeNo=’001’,objetcCountNum=15
fDateMonth=’ 2007/09’, objectNo=’ 2002’, storgeNo=’001’,objetcCountNum=12
…插入在库管理表。这里就是要遍历第一次查询出来的所有结果集,对其中每条记录进行操作。除了用游标有没有其他更好的办法
谢谢了

解决方案 »

  1.   

    有点问题修改下,
    问题如下,随便举的例子: 
    仓库统计表:storgeCount(sDateMonth,storgeNo,objectKind, objectNo,) 
    在库管理表:factoryNow(fDateMonth,objectNo,storgeNo,objetcCountNum) 
    在仓库统计表中根据统计年月sDateMonth查出一组以员工编号eno分组的记录 
    Select A.sDateMonth, A.storgeNo, A.objectKind, A.objectNo, count(*) from storgeCount A where A.sDateMonth=’YYYY/MM’ group by A.objectNo 
    如: 
    A.sDateMonth  storgeNo   objectKind   objectNo count(*) 
    2007/09       001        1            1001     8 
    2007/09       001        1            1002     15 
    2007/09       001        2            2002     12 
    2007/09       002        3            3001     18 
    …  然后利用查询出来的结果集中的每条数据来对在库管理表进行更新操作 
    比如依次将 
    fDateMonth=’ 2007/09’, objectNo=’ 1001’, storgeNo=’001’,objetcCountNum=8 
    fDateMonth=’ 2007/09’, objectNo=’ 1002’, storgeNo=’001’,objetcCountNum=15 
    fDateMonth=’ 2007/09’, objectNo=’ 2002’, storgeNo=’001’,objetcCountNum=12 
    …插入在库管理表。 这里就是要遍历第一次查询出来的所有结果集,对其中每条记录进行操作。除了用游标有没有其他更好的办法 
    谢谢了
      

  2.   

    update factoryNow b set (fDateMonth,objectNo,storgeNo,objetcCountNum)=(Select A.sDateMonth, A.storgeNo, A.objectKind, A.objectNo, count(*) objetcCountNum from storgeCount A where A.sDateMonth=’YYYY/MM’and a.关联字段= b.关联字段 group by A.objectNo)  
      

  3.   

    楼主和4楼的查询语句有错误哦,查询语句中有count(*)这样的聚合函数,如果选择列包含列、表达式和聚合函数,在group by分组时,这些列、表达式都必须出现在group by子句中!还有我试了下,像搂主的A.sDateMonth=’YYYY/MM’ 我不管用日期型还是字符型都查询不到数据。不知是不是?
    根据楼主的意思,改下,看能符合楼主的要求不
    update factoryNow a set(fDateMonth,objectNo,storgeNo,objetcCountNum)=(select sDateMonth,objectNo,storgeNo,count(*) from storgeCount where  a.关联字段= b.关联字段 group byobjectNo,fDateMonth,storgeNo,objetcCountNum)
      

  4.   

    sorry,我说的不够全面,那个查询分组的也写的不对
    这里并不是直接将整个结果集进行插入或更新操作,而是要对查询出的结果集中每一条记录进行一个判断,判断其是否存在与在库表中再来决定该条记录是应该insert还是update
      

  5.   

    根据楼主的需求。程序的大体结构如下:
    利用游标取得处理对象数据
       游标循环内:
           SELECT INTO取得处理数据是否存在
           更新或者插入
      

  6.   

    kidman_ray 
    Kidman Ray 
    等 级:
     发表于:2007-10-23 15:33:508楼 得分:0 
    根据楼主的需求。 程序的大体结构如下: 
    利用游标取得处理对象数据 
       游标循环内: 
           SELECT INTO取得处理数据是否存在 
           更新或者插入  
     ===========================================
    恩,目的是那样的,但是我就是想知道如果除去游标的话有没有另外的方法来替代,因为要用到的地方数据量会很大,用游标的话性能影响比较大。我感觉应该可以用别的方法实现的,继续顶
      

  7.   

    感觉还是用游标来实现,第一存在判断,第二(即使用case...when...)一条sql语句中可以同时存在insert和update?
      

  8.   

    不用游标,可以用merge into来实现
    如下
    merge into table A
    using (select from B)
    on(cA1=cB1...)     --对两表的对应列进行比较
    where matched then
          update...    --匹配则update
    where not matched then
          insert...    --未匹配则insert