请各位大虾多多指点,想实现的问题如下,最好能帮忙列下sql或者过程:
class 在 AA 表中对应的property和price有7种情况(class A: propertyA: priceA,
                                               class B: propertyB: priceB,
                                               class C: propertyC: priceC,
                                               class D: propertyD: priceD,
                                               class E: propertyE: priceE,
                                               class F: propertyF: priceF,
                                               class G: propertyG: priceG,                                            )
要将这7种情况的class信息插入到另外一张表BB中,插入的前提条件是
1。其中的一条记录地Price要减掉另外一张CC表中的某值Q, 并且选择这条记录的条件是在有A品种的时候选A, 无A的时候选C,无A,C的时候选E,无A,C,E的时候选B,无A,C,B,E 的时候选D,无A,B,C,D,E的时候选F
2。在插入这条已经减掉Q的记录到BB表中后,其它AA表中的class信息无变化的插入BB表中感激不尽~~~~

解决方案 »

  1.   

    你这个应该可以用merge语句实现。你查一下merge的用法,应该可以搞定。
      

  2.   

    merge into 是专门基于分析合并处理的
      

  3.   


    insert into BB
    select class,property,decode(rn,1,price-CC.Q,price) from (
    select class,property,price,rownum rn from AA order by decode(品种,'A',0,'C',1,'E',2,'B',3,'D',4,'F',5,6)

    --我不知道你的CC.Q从哪里来,如果是定值,直接替换掉就行,如果要查表,你就自己做个条件连接
    --还有用insert into.. select..的时候,注意下表结构,
    --如果两个表的表结构有差别,就用insert into BB(具体的字段) select ...
      

  4.   

    谢谢楼上各位的回答,3楼说的做法很详细真的很感谢,但是这个语句我一开始也想用decode,它有一个细节并未解决实际问题,就是如果这个class里面有A有C的时候,它先读到C的那一行,也会直接插入到BB表里面,也就是说它不能排除这种可能,
    谢谢1和2楼的回答,正在学习merge,真的希望继续讨论哈
      

  5.   


    你自己的逻辑就没弄清楚。
    “无A的时候选C,无A,C的时候选E,”那你第一句话就是错的,无A时是选C和E中的一个,不是C。
    nvl(A,nvl(C,nvl(E,nvl(B,nvl(nvl(D,F))你的逻辑是这个。
      

  6.   

    即使有A也有C,也是没问题的啊,因为我已经排序了,A肯定在C的前面啊,然后就用A减那个值后插入,其他B,c就无变化插入。
    还有楼主说读到C,就把C直接插入,这个不是你要的效果啊,你不是说除了第一条是要做完减法后插入,其他的都是无变化插入吗?