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;
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;
首先说这函数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为一个的 的总数
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)。
二、
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)