所需用到的表:
temp_a --主表
temp_b --临时表a
temp_c --临时表b/*
说明:
主表:主表中字段比较多,在此只列出用到的个别字段.
col_nbr, col_seq , col_type , col_amount
其中col_nbr, 与col_seq 是联合主键.
临时表a:
col_type , col_newid , col_newname
临时表b:
col_type , col_charge
*/主表:
--------------------------------------
  col_nbr col_seq col_type col_amount
1.20091116 1 501 50.00
2.20091116 2 202 150.0
2.20091116 3 99999 50.00
3.20091116 4 88889 150.0
临时表a:
--------------------------------------
  col_type col_newid col_newname
1.99999 1 POS
2.88889 3 现金
3.88887 2 信用卡
4.88886 4 抵押
临时表b:
--------------------------------------
  col_type col_charge
1. 501 100501
2. 202 100202
3. 45 100045/*
需求是通过主表的col_type值关联出两个临时表中的 col_newid与col_charge字段值.
有一点值得注意的是需要对主表中的col_type里的202与45(我没有写上)做个判断,如果有202或45就要与其88889关联取出临时表a
中的col_newid.其余的正常取.
*/
最终结果效果
--------------------------------------
col_nbr col_charge col_newid
20091116 100501 1
20091116 100202 3
不知道我说的够不够清楚?

解决方案 »

  1.   

    是只用select做成语句呢?还是可以写成procedure?
      

  2.   

    最终结果效果 
    -------------------------------------- 
    col_nbr col_charge col_newid 
    20091116 100501 1 
    20091116 100202 3 
    最终结果的col_charge与col_newid这两个字段是如何对应的。
      

  3.   

    /* 
    需求是通过主表的col_type值关联出两个临时表中的 col_newid与col_charge字段值. 
    有一点值得注意的是需要对主表中的col_type里的202与45(我没有写上)做个判断,如果有202或45就要与其88889关联取出临时表a 
    中的col_newid.其余的正常取. 
    */ 正常取是什么意思。
      

  4.   


    就是你上次给我写的那样,最终结果的 col_charge 是临时表c中的col_charge  最终结果的col_newid是临时表b中的col_newid临时表c中的col_charge与临时表b中的col_newid是通过主表中的 col_type关联过来的
      

  5.   

    还是不明白。。最终结果效果 
    -------------------------------------- 
    col_nbr col_charge col_newid 
    20091116  100501       1 
    20091116  100202       3 
    其中,col_charge与col_newid 都是和col_nbr对应的,
    也就是说,100501、100202对应20091116,1、3对应20091116;
    根据你的说明,100202对应202对应88889对应到3上,那么100501和1是通过什么对应起来的。?请你给出多于4条的测试数据,这样看不出什么规律,你表达的也不是很清楚。
      

  6.   

    SELECT a.col_nbr,
           c.col_charge,
           decode(b.col_newid,
                  '45',
                  (SELECT col_newid FROM temp_b WHERE col_type = '45'),
                  '202',
                  (SELECT col_newid FROM temp_b WHERE col_type = '202'),
                  b.col_newid) col_newid
    FROM temp_a a, temp_b b, temp_c c
    WHERE a.col_type = b.col_type
    AND a.col_type = c.col_type;
    你看看这个行不行,不知道你的意思我理解的对不对啊!
      

  7.   

    SELECT a.col_nbr,
           c.col_charge,
           decode(b.col_newid,
                  '45',
                  (SELECT col_newid FROM temp_b WHERE col_type = '88889'),
                  '202',
                  (SELECT col_newid FROM temp_b WHERE col_type = '88889'),
                  b.col_newid) col_newid
    FROM temp_a a, temp_b b, temp_c c
    WHERE a.col_type = b.col_type
    AND a.col_type = c.col_type;
    上面的那个只顾了写了,忘了这两个特殊的是取88889对应的,这次应该没问题了吧!