我是ORACLE 10的数据库,数据表A两个列 A1,A2都是NUMBER型,数据表B 有B1(NUMBER).我现在要做一个SQL查询。查询的结果某列值为 A1*A2*B1 ,问题是这样的数据表中这三个字段可能为空,我的计算要在三个值都不为空的情况下做,如有三个值有一个为空,我显示的内容为“数据不全”。这些用一条SQL怎么实现

解决方案 »

  1.   


    select decode((nvl(a1,0)*nvl(a2,0)*nvl(b1,0)),0,'数据不全') from a,b where a.a1=b.b1;你看行不行,将空值转为零,只要有一个值为空时,即结果为0。当结果为0时。即满足条件:数据不全';
    我没试,你试试看
      

  2.   


    select decode((nvl(a1,0)*nvl(a2,0)*nvl(b1,0)),0,'数据不全') from a,b where a.a1=b.b1 where (a.a1 is null or a.a2 is null or b.b1 is null)你再加个条件
      

  3.   


    select 
     (CASE
             WHEN A1 IS NULL THEN
             '数据不全'  
             WHEN A2 IS NULL THEN
             '数据不全'  
             WHEN B1 IS NULL THEN
             '数据不全'  
             ELSE
             A1*A2*B2
           END) AS account
    from A,B
      

  4.   

    oracle 用NVL来搞比较好吧 楼上的
      

  5.   

    你说我么?呵呵,nvl是比较方便,可如果说起效率,是没有case效率高的
      

  6.   

    在mssql中null加减乘除任何值都等于null 
    在oracle中我不知道
    如果一样的话:select (CASE WHEN A1*A2*B2 IS NULL THEN
             '数据不全' ELSE A1*A2*B2
           END) AS account
    from A,B