用oracle写条sql,要求:   从外界传一个变量到sql里面,然后根据这个变量的值进行以下操作:
    
     (1)。如果这个变量的值为 0 的话,让这条sql返回的值为这个表里面的某一个字段的值的总和;
      
     (2)。如果这个变量的值不为 0 的话,让这条sql返回的值为这个表里面的这个字段(同1中的字段)。   例如:   变量为temp,字段为ext1。   错误的sql:select case when trim(:temp)='0' then sum(ext1) else ext1 from dual; 
    
    --为了更清楚的表达上面叙述的意思,故意写个错误的sql。   有能写出来的,非常感谢!急!!!!!!

解决方案 »

  1.   

    不可以的,要么对列ext1都应用聚合函数,要么都不应用,不可以一个应用一个不应用聚合函数。
    下面的是可以执行的:SELECT CASE WHEN &VAR = 0 THEN SUM(MyNum)
           ELSE max(MyNum) END
    FROM T132;
      

  2.   

    select decode(trim:temp), '0', (SELECT sum(ext1) FROM tablename), (SELECT ext1 FROM tablename WHERE colname=:temp))
     from dual
    1 tablename 替换成 你的表  
    2   如果这个变量的值不为 0 的话,让这条sql返回的值为这个表里面的这个字段(同1中的字段)。
        这个逻辑有问题的,按照上下文我认为应该是返回 在某个字段(colname)为 temp 的 那个字段值