本帖最后由 xjswuai 于 2009-11-12 14:08:45 编辑

解决方案 »

  1.   

    大概知道什么意思了
    同一个so_nbr中的三个so_charge_type_id不会重复吧?
    先将主表行转列,再关联其他两表
    但是a表中同一个so_nbr中,哪条记录对应b表,哪条对应c表,应该有标识吧
    是通过seq吗,还是仅仅通过长度
      

  2.   

    主表so_nbr与seq是联合主键我想取b表的newid与c表的charge_id就得通过主表的so_charge_type_id来取。
      

  3.   


    那b表的newid与c表的charge_id与最终的效果图里的一列相对应?还是与两列相对应?
    说说最终效果图中列的对应关系啊
      

  4.   

    关键是这个关联是怎么个对应法
    一个so_nbr对应几个new_id和changeid
    是一个so_nbr其中seq满足条件的和b表关联,满足别的条件的和c表关联
    还是所有记录都与b表和c表一一关联说不清楚的话,可以弄些具有代表性的实例数据来说明一下
    列出原来的数据和你要的结果上面的图只能看出表结构而不能看出有何联系,及最终效果从何而来
      

  5.   

    刚搞明白。
    意思是这样的。
    效果表里面的so_nbr字段有3个相同的值20090010010000020300,但它与seq是联合主键。对应的seq值是2,3,4
    效果表里的charge_id是从c表的charge_id取出,效果表里的payment_type_id是从b表newid取出他们都是从主表里so_charge_type_id来获得。  99999  99993   519
    其中5位长的与b表关联来获得newid 
    3位长的与c表关联获得charge_id意思就是这样,如果对应不上就用空来代替,最后分别插入到效果表里的charge字段与payment_type_id上
    各位大侠给看看吧···
      

  6.   

    ...如果你自己都不明白,是不能让我们明白的
    还是一个要求,给一组实例数据,以及这组数据的查询结果
    你这个回答不能够说明问题:
    “不知道怎么才能把3个so_charge_type_id给分开进行查询中间表”这个分开是怎么回事
    及怎么处理结果
      

  7.   


    15:18:33 scott@TUNGKONG> select * from a;SO_NBR          A SO_CH        SEQ
    --------------- - ----- ----------
    200153000511    1 519            0
    200153000511    1 99999          1
    200153000511    1 99993          2已用时间:  00: 00: 00.00
    15:18:36 scott@TUNGKONG> select * from b;SO_CH NEW
    ----- ---
    99999 1
    99992 2
    99996 3已用时间:  00: 00: 00.00
    15:18:40 scott@TUNGKONG> select * from c;SO_CH CHARGE_ID
    ----- ----------
    519   1000107
    104   1000102
    103   100520已用时间:  00: 00: 00.00
    15:18:45 scott@TUNGKONG> select so_nbr,seq,decode(length(a.so_charge_type_id),3,id) "charge_id",decode(length(a.so_charge_type_id),5,id) "payment_type_id" from a,
    15:18:58   2  (select so_charge_type_id,newid id from b union all select so_charge_type_id,charge_id from c) b
    15:18:58   3  where a.so_charge_type_id = b.so_charge_type_id(+)
    15:18:58   4  order by 1,2;SO_NBR                 SEQ charge_id  payment_ty
    --------------- ---------- ---------- ----------
    200153000511             0 1000107
    200153000511             1            1
    200153000511             2已用时间:  00: 00: 00.03