有两表:
表A:(日志)
 no       zy    jh     bh      chr2    money    num1           rq              ye
999998  B   null      null   01010104  1000  0.25 2009-6-24 12:12:00   1045.26
201  J   1001     20062271 null     500      100   2008-8-20 11:09:46    300
表B:(明细表) no        jh       bh          gz   money     num1           rq
999998 1001 20062271 01070201 2.8 0 2008-8-20 11:09:46
999998 1001 20062272 01070201 2.8 0 2008-8-20 11:11:52所有明细表B的都往日志表A中插入一条记录,且表A的ZY字段为“J”我要想的数据是表A的所有字段内容,
要求:如果表A里的CHR2字段为null时,则取表B的GZ字段内容。

解决方案 »

  1.   

    不是很清楚这两个表通过什么关联的!
    参考:
    SELECT A.NO,
           A.ZY,
           A.JH,
           A.BH,
           NVL(A.CHR2, B.GZ),
           A.MONEY,
           A.NUM1,
           A.RQ,
           A.YE
      FROM A, B
     WHERE A.NO = B.NO(+)
      

  2.   

    A表和B表是通过,NO字段进行关联
      

  3.   

    SELECT A.NO, 
          A.ZY, 
          A.JH, 
          A.BH, 
          NVL(A.CHR2, B.GZ), 
          A.MONEY, 
          A.NUM1, 
          A.RQ, 
          A.YE 
    FROM A left join B 
    on A.NO = B.NO 
      

  4.   

    SELECT A.NO, 
          A.ZY, 
          A.JH, 
          A.BH, 
          decode(A.CHR2,null, B.GZ,a.CHR2), 
          A.MONEY, 
          A.NUM1, 
          A.RQ, 
          A.YE 
      FROM A, B 
    WHERE A.NO = B.NO(+) 用decode也可以
      

  5.   

    回复4楼的,我用了decode后,出现重复记录,
    表A是日志表,表B的所有记录都要往表A插入,
    表A和NO和表B的NO字段是关联的,表B往表A插入的记录都是表A中ZY字段为“J”的内容,但是CHR2为空,我就是想,如果表A的CHR2字段为空时,则取表B的GZ字段,谢谢
      

  6.   

    SELECT   TA.NO,              
             TA.JH,   
             TA.BH,  
             decode(TA.ZY,'J',tb.GZ,'B',ta.chr2),
             ROUND(TA.MONEY,2) ,  
             ROUND(TA.NUM1,2),
             TA.RQ,   
             ROUND( TA.TE,2)        FROM A ta,
                B tb
      WHERE ta.NO=tb.NO(+) AND
            TA.ZY IN ('B','J') AND
            TA.RQ>=TO_DATE('20080227','YYYYMMDD')  AND
            TA.RQ<=TO_DATE('20080227','YYYYMMDD')+1  
     GROUP BY TA.NO,              
              TA.JH,   
              TA.INVNO,  
              decode(TA.ZY,'J',tb.GZ,'B',ta.chr2),
              ROUND(TA.MONEY,2) ,  
              ROUND(TA.NUM1,2),
              TA.RQ,   
              ROUND( TA.YE,2) 
      这是我写的SQL,执行后,每条记录就会出现重复的的,应该只有7条记录,结果出现了14条记录,
    我的意思就是想,如果表A的ZY字段是‘J’时,则取表B的GZ字段,如果是‘B’时,则取表A的CHR2字段
      

  7.   


    你取的是A表的记录,A,B两个表是主从表的关系,因为靠no来关联的,这时肯定会出现多条记录。
      

  8.   

    SELECT  TA.NO,              
            TA.JH,  
            TA.BH,  
            decode(TA.ZY,'J',tb.GZ,'B',ta.chr2,null), 
            ROUND(TA.MONEY,2) ,  
            ROUND(TA.NUM1,2), 
            TA.RQ,  
            ROUND( TA.TE,2)       FROM A ta, 
                B tb 
      WHERE ta.NO=tb.NO(+) AND 
            TA.ZY IN ('B','J') AND 
            TA.RQ>=TO_DATE('20080227','YYYYMMDD')  AND 
            TA.RQ <=TO_DATE('20080227','YYYYMMDD')+1  
    GROUP BY TA.NO,              
              TA.JH,  
              TA.INVNO,  
              decode(TA.ZY,'J',tb.GZ,'B',ta.chr2,null), 
              ROUND(TA.MONEY,2) ,  
              ROUND(TA.NUM1,2), 
              TA.RQ,  
              ROUND( TA.YE,2) 
      这是我写的SQL,执行后,每条记录就会出现重复的的,应该只有7条记录,结果出现了14条记录, 
    我的意思就是想,如果表A的ZY字段是‘J’时,则取表B的GZ字段,如果是‘B’时,则取表A的CHR2字段我取的这天的原始数据中,表A的CHR2和表B中的GZ都是为NULL ,如果表A的CHR2和表B的GZ都为NULL时,则显示是空
      

  9.   

    select no ,     zy ,   jh ,   bh ,     nvl(a.chr2,(select b.GZ from b where a.no=b.no)) , money  ,  num1    ,      rq    ,ye  from a
      

  10.   

    在PL/SQL里执行后提示:ORA-01427: 单行子查询返回多于一个行
      

  11.   

    简单改改,不知道符合吗?
    select no ,    zy ,  jh ,  bh 
    ,    nvl(a.chr2,(select MAX(b.GZ) from b where a.no=b.no)) , money  ,  num1    ,      rq    ,ye  
    from a 
      

  12.   

    MAX(b.GZ) 改成 where 后  加 and rownum<2 会更快点
    select no ,    zy ,  jh ,  bh 
    ,    nvl(a.chr2,(select b.GZ from b where a.no=b.no and rownum<2)) , money  ,  num1    ,      rq    ,ye  
    from a