两个Table
BOM (id ,item ,count ,change)
REV(id ,item ,change ,rev_number ,old_revnumber)
关系如下
BOM.item=REV.item
BOM和REV的id都是唯一的
1个Item有多个BOM
1个BOM有多个版本,版本更新通过change(change=0时为初始版本)更新,更新后同时反映在REV中
在REV中每一个版本的BOM都有一条记录,rev_number为当前版本编号,old_revnumber为前一版本编号查询结果要求
给出BOM每个版本中count的和

解决方案 »

  1.   

    count的意思是什麼?
    在版本更新中,Count的值會如何變化?给出BOM每个版本中count的和::意思是如果你更新了N次版本,那和=N*count ???
      

  2.   

    count是一个数量
    在版本更新中,count会增加,但是只会反映在那一次改变中改变的意思就是在原来的count上要加的count
    对于一个不是初始时的版本count只是一个增量
      

  3.   

    按你所說的,count的增量只反映最新的一次改變,以前的增量就會“丟失”,那樣說根本就不可能計算出你所要的。丟失的東西誰也無能為力,如果你只是在表設計階段,
    建義你把表改了:
    BOM (id,count,change) a;
    REV(id ,a.id ,count,change ,rev_number ,old_revnumber) b;在這裡,如果b.count只是每個版本更新進的一個增量,那求和就是count(b.count) where b.change<=“要計算的版本號”
    在你的表中BOM中item並不依賴於主健,所已只將REV表中的item=a.id即可。  暈,寫到這裡,發現,表BOM是多余的了,呵呵。只要一個表:
    REV(id,count,change,rev_number,old_revnumber) 就可以了。
    哈哈
      

  4.   

    啥叫每一个版本的count的和???
    有问题呀,每一个版本只能有一个呀!!!真的不明白。
      

  5.   

    由于有多个不同的item,而每个item可以有不同的BOM版本(体现在BOM中的change---在这里会在BOM增加一条记录---此项中的count即为增加的count,同时也会在REV中增加一条记录---此记录中的change和item与BOM中增加的纪录的item和change相同,同时REV中的rev_number记录当前版本号,REV中的old_revnumber记录上一次的版本号,这个版本号在相同的item项中是唯一的只有通过他才能找到前一个版本的REV,而通过前一个版本的REV.change才能找到BOM中的前一条记录,从而找到前一版本的count)
      

  6.   

    回precipitant(塞北的雪) :
    每一个版本是只有一个count,但在数据库里只有count的变化(增加值),故当前版本的count应是第一版本的count和第一到当前中的增加值的和
      

  7.   

    SQL> select * from testbom;ID         ITEM            count     CHANGE
    ---------- ---------- ---------- ----------
    test001    aaa                10          0
    test002    aaa                20          1
    test003    aaa                30          2
    test004    aaa                40          3
    test005    bbb                10          0SQL> select * from testrev;ID         ITEM           CHANGE REV_NUMBER OLD_REVNUM
    ---------- ---------- ---------- ---------- ----------
    test0001   aaa                 0 version01
    test0002   aaa                 1 version02  version01
    test0003   aaa                 2 version03  version02
    test0004   aaa                 3 version04  version03
    test0005   bbb                 0 version01SQL> select sum(a."count") from testbom a,
      2  (select * from testrev where item='aaa' connect by prior
      3  old_revnumber=rev_number start with rev_number='version03') b
      4  where a.item='aaa' and a.item=b.item and a.change=b.change;SUM(A."COUNT")
    --------------
                60SQL>
      

  8.   

    最后采用connect by           start with