sum(case when q1.status <> '0' and decode(fun_isminorderdetid_1(q1.orderid, q1.orderdetid),1,1,0) = 1 then 1 else 0 end)
q1表 status--状态 orderid--ID  orderdetid--详细ID
我是新手,那位大虾帮我解释下这是什么意思fun_isminorderdetid_1的内容
create or replace function fun_IsMinOrderdetid_1(sOrderid in q1.orderid%type,sOrderdetid in q1.orderdetid%type) return integer is
  Result integer;  v_orderdetid q1.orderdetid%type;
begin
  select min(orderdetid) into v_orderdetid
     from q1
     where orderid=sOrderid;  if v_orderdetid=sOrderdetid then
     Result:=1;
  else
     Result:=0;
  end if;  return(Result);
end fun_IsMinOrderdetid_1;

解决方案 »

  1.   

    状态 <> 0  的 所有 ID(重覆的只算一条)数据件数。
      

  2.   


    首先说这函数fun_isminorderdetid_1 的功能 
    就是根据传入id 的求出最少的详细ID与传入的详细id 是否相等 相等则1 否则就是0sum(case when q1.status <> '0' and decode(fun_isminorderdetid_1(q1.orderid, q1.orderdetid),1,1,0) = 1 then 1 else 0 end)
    而这里就是 求出状态不为0,id的详细id为一个的 的总数
      

  3.   

    sum(case when q1.status <> '0' and decode(fun_isminorderdetid_1(q1.orderid, q1.orderdetid),1,1,0) = 1 then 1 else 0 end)
    q1表 status--状态 orderid--ID orderdetid--详细ID
    我是新手,那位大虾帮我解释下这是什么意思解:case when then 就与If else 是一样的,Decode也是一样的,它们之间的区别是Decode只能适用于
    比较相等的情况。当q1表中的状态不为0,并且(如果fun_isminorderdetid_1函数返回的值是1那么等于1,否则等于0。这是判断这个函数的值)它等于1,那么返回1 否则返回0.补充:如果Decode里的函数返回的是0那么条件不成立,sum(0)。
      

  4.   

    一、函数 :fun_isminorderdetid_1功能是:判断表q1里的字段(orderdetid--详细ID)是否有字段(orderid--ID )的值,若存在返回1 ,否则返回0;
    二、
    sum(case when q1.status <> '0' --状态不为0
            and decode(fun_isminorderdetid_1(q1.orderid, q1.orderdetid),1,1,0) = 1
    --fun_isminorderdetid_1(q1.orderid, q1.orderdetid)返回1时,=1,否则=0
    --即表q1里详细id和id相等并且状态不为0时,sum求和

     then 1 else 0 end)