INSERT INTO SJ_TPICKUP_20070622
 SELECT A.FJOBID,MIN(A.FLSTUPDTIME),
SUBSTR(B.FBIN,1,4)||'-'||(case  when (substr(fbin,4,1)) in (1,3,5,7,9)  and (substr(fbin,5,2)) in (1,2,3,4) then '前' 
      when (substr(fbin,4,1)) in (1,3,5,7,9)  and (substr(fbin,5,2)) in (5,6,7,8,9,10,11,12) then '后'
      when (substr(fbin,3,2)) in (2,4,6,8,10)  and (substr(fbin,5,2)) in (1,2,3,4,5,6,7,8) then '前' 
       when (substr(fbin,3,2)) in (2,4,6,8,10)  and (substr(fbin,5,2)) in (9,10,11,12) then '后' 
           end  ),
COUNT(B.FARTICLE),SUM(B.FQTY),SUM(B.FQTY*C.FPRICE)
   FROM TPICKUP A,TPICKUPDTL B,TARTICLE C
  WHERE A.NUM = B.NUM 
    AND B.FARTICLE = C.FGID 
    AND A.FPICKAREA = 20
    AND A.FJOBID >= TO_CHAR(aFILDATE,'YYMMDD')
    AND A.FJOBID <= TO_CHAR(bFILDATE,'YYMMDD')
    --AND A.FLSTUPDTIME >= aFILDATE
    --AND A.FLSTUPDTIME <= bFILDATE
  GROUP BY A.FJOBID,SUBSTR(B.FBIN,1,4)||'-'||(case  when (substr(fbin,4,1)) in (1,3,5,7,9)  and (substr(fbin,5,2)) in (1,2,3,4) then '前' 
      when (substr(fbin,4,1)) in (1,3,5,7,9)  and (substr(fbin,5,2)) in (5,6,7,8,9,10,11,12) then '后'
      when (substr(fbin,3,2)) in (2,4,6,8,10)  and (substr(fbin,5,2)) in (1,2,3,4,5,6,7,8) then '前' 
       when (substr(fbin,3,2)) in (2,4,6,8,10)  and (substr(fbin,5,2)) in (9,10,11,12) then '后' 
           end  );INSERT INTO SJ_TPICKUP_20070622
 SELECT A.FJOBID,MIN(A.FLSTUPDTIME),SUBSTR(B.FBIN,1,4),COUNT(B.FARTICLE),SUM(B.FQTY),SUM(B.FQTY*C.FPRICE)
   FROM TPICKUP A,TPICKUPDTL B,TARTICLE C
  WHERE A.NUM = B.NUM 
    AND B.FARTICLE = C.FGID 
    AND A.FPICKAREA = 20
    AND A.FJOBID >= TO_CHAR(aFILDATE,'YYMMDD')
    AND A.FJOBID <= TO_CHAR(bFILDATE,'YYMMDD')
    --AND A.FLSTUPDTIME >= aFILDATE
    --AND A.FLSTUPDTIME <= bFILDATE
  GROUP BY A.FJOBID,SUBSTR(B.FBIN,1,4);这两个执行出来后COUNT(B.FARTICLE),SUM(B.FQTY)得出的结果是一样的,但最后SUM(B.FQTY*C.FPRICE)
的结果有差别。第一个的数比第二个数少,请高手指教

解决方案 »

  1.   

    提供一个思路:
    从SUM(B.FQTY*C.FPRICE) 有差异的对应的 A.FJOBID和SUBSTR(B.FBIN,1,4),两句sql都增加
    (A.FJOBID,SUBSTR(B.FBIN,1,4)) IN (...)子句,缩小查询范围;
    去除group子句;
    将insert部分去掉,只保留select,
    将select的MIN(A.FLSTUPDTIME)去掉,将count去掉直接取b.farticle,
    将sum去掉直接取b.fqty,
    将sum(b.fqty*c.fprice)拆成b.fqty和c.fprice,
    然后用select minus select,查出detail的差异,然后再去看where子句的逻辑差异,会比较方便一点。