没太理解,是不是可以用
b.b3 = (
       select b3 from 
         (select 1,b.b3 from b,a where a.ax=b.b1 and a.ay=b.b2 
         union
         select 2,b.b3 from b,a where a.ax=b.b1 and b.b2=''
         order by 1
         )where rownum<2
       )
这个条件?

解决方案 »

  1.   

    “b.b3 = (
           select b3 from 
             (select 1,b.b3 from b,a where a.ax=b.b1 and a.ay=b.b2 
             union
             select 2,b.b3 from b,a where a.ax=b.b1 and b.b2=''
             order by 1
             )where rownum<2
           )“
    如果像你这么写进where 后面,那整个语句中b.b3这个字段永远只有一个值啊!!(rownum<2)
    根本谈不上参照阿!
      

  2.   

    解释一下,
    这个sql语句中的b.b3是从B表(注意该表的主建)中取得,取得的条件是后面的那个sql那样取得,后面的sql的意思是当满足条件:如果,a.ax=b.b1时,b.b2可能为空(事实是上是空格,我忘了加trim函数了)如果b.b2不为空,那就加a.ay=b.b2的条件,
    "order by 1"和"where rownum<2"是说如果a.ax=b.b1的情况b.b2既有a.ay=b.b2,又有为空的值,那么要前者的b.b3值,而且只要一个值。我是想把像后面sql那样完全同样效果的sql写法,写进前面的sql中,
    请教这样的写法
      

  3.   

    SELECT a.xxx, a.xxx,
    (CASE WHEN a.ay=b.b2 AND b.b2<>'' THEN b.b3
    WHEN b.b2='' THEN b.b3
    END) AS b3,
    a.xxx,a.xxx
    FROM b, a, ... 
    WHERE a.ax=b.b1
    AND ...