1、ORACLE数据库是9i,测试的时候没有其他人使用
2、进入SQLPLUS后,第一次运行的值是19000多,第二次运行的值是8000多,第三次的值才正确,是1800多,接着再执行,结果就保持在1800多不变了,够奇怪的。基本上每次重新进入SQLPLUS执行都会遇到相同的情况。
3、SQL如下,用来获取某段时间内某人的加工总金额:
select nvl(sum(nvl(xfI.qty_finish,0)*nvl(xjs.job_pay,0)),0)
from XXWIPT_FLOWCARD_ITEM xfi,----工人加工信息
     XXWIPT_PRODUCT_WORK xpw,----产品工序关系
     XXPAYT_JOB_STANDARD xjs,----单件工价
     HR_EMPLOYEE_BASE heb---人员信息
where xfi.working_id = xpw.working_id----工序ID
and xfi.item_id = xpw.item_id----产品ID
and xfi.employee_code = heb.employee_code----人员工号
and heb.employee_id = 259
and xpw.product_work_id = xjs.product_work_id---工价ID
and trunc(xfi.finish_date) >= to_date('041021','yymmdd')---完工开始日期
and trunc(xfi.finish_date) <= to_date('041120','yymmdd')---完工结束日期4、请高手不啬指教!

解决方案 »

  1.   

    trunc(xfi.finish_date) 有问题吧
    ----------------------
    如果你的finish_date存在时:分:秒,那最好使用to_date(xfi.finish_date) >= to_date('041021','yymmdd');
      

  2.   

    select round(finish_date),
           trunc(finish_date),
           to_date(finish_date),
           finish_date
    from XXWIPT_FLOWCARD_ITEM;
      

  3.   

    我这样试了下,甚至将日期条件都给去掉了,一旦数据库重新启动后,第一次查询还是有问题,取得的值和再次查询的值不一致。会不会是ORACLE的什么BUG啊?
      

  4.   

    先用 select count(*) from ....
    看看记录数变不变
      

  5.   

    应该是SQL有问题, 所以先不要连着么多表. 
    逐渐将表加上.
    看看为题出在那个环节.
      

  6.   

    昨天客户告诉我数据不准,我查问题时发现的。不光是客户那里,我们公司内部的数据库也有这个问题。以前从没出过这种事情。
    刚才我又试了一下,每次重启动数据库后用那句SQL查询的记录数count(*)没有变化,但就是返回的值在第一次的时候不正确,而且不正确的值就那几个,也不是随机变化的。
      

  7.   

    试一试:看什么效果没有
    select sum( f * p ), count(*)
    from (
    select nvl(xfI.qty_finish,0) as f, nvl(xjs.job_pay,0)) as p
    from XXWIPT_FLOWCARD_ITEM xfi,----工人加工信息
         XXWIPT_PRODUCT_WORK xpw,----产品工序关系
         XXPAYT_JOB_STANDARD xjs,----单件工价
         HR_EMPLOYEE_BASE heb---人员信息
    where xfi.working_id = xpw.working_id----工序ID
    and xfi.item_id = xpw.item_id----产品ID
    and xfi.employee_code = heb.employee_code----人员工号
    and heb.employee_id = 259
    and xpw.product_work_id = xjs.product_work_id---工价ID
    and trunc(xfi.finish_date) >= to_date('041021','yymmdd')---完工开始日期
    and trunc(xfi.finish_date) <= to_date('041120','yymmdd')---完工结束日期
    )