我的语句如下,目的是匹配dcy表中所有的service_id dcy有20W条记录,可是匹配出来为什么少了很多! 
SELECT   dcy.service_id, dcy.user_id, dcy.city_code,
                          dcy.user_name, dcy.acts_name, dct.acts_key,
                          dct.customer_type_key, yb_detail,
                          SUM (DECODE ((  TO_DATE ('20080622', 'yyyymmdd')
                                        - dct.snap_date
                                       ),
                                       0, total_fee,
                                       1, total_fee,
                                       2, total_fee,
                                       3, total_fee,
                                       4, total_fee,
                                       5, total_fee,
                                       6, total_fee,
                                       0
                                      )
                              ) AS benzhou
                     FROM dmr.dm_call_yujin dcy, dm.dm_call_ticket dct
                    WHERE dcy.service_id (+)= dct.service_id
                      AND dct.snap_date >
                             (  TRUNC (TO_DATE ('20080622', 'yyyymmdd'), 'dd')
                              - 7
                             )
                 GROUP BY dcy.service_id,
                          dcy.user_id,
                          dcy.city_code,
                          dcy.user_name,
                          dcy.acts_name,
                          dct.acts_key,
                          dct.customer_type_key,
                          yb_detail

解决方案 »

  1.   

    WHERE dcy.service_id = dct.service_id(+)  试试!
      

  2.   

    试过了 也不行?
    难道是AND dct.snap_date > (  TRUNC (TO_DATE ('20080622', 'yyyymmdd'), 'dd')  - 7 )
    这个的原因,因为dct表中数据实在太多了,而我要做的事周报 所以只取一周的数据!
      

  3.   

    你先看看dct 中符合你条件dct.snap_date > (  TRUNC (TO_DATE ('20080622', 'yyyymmdd'), 'dd')  - 7 ) 的数据量的大小
      

  4.   

    dcy表示279469 dct下一周的数据是4997958
    我得到的结果是245441
    其实按照我的想法是 279469就正确了!
      

  5.   

    你可以把先相的条件去掉一步一步测试一下,应该很快就能找到问题!
    select *
     FROM dmr.dm_call_yujin dcy, dm.dm_call_ticket dct 
                        WHERE dcy.service_id (+)= dct.service_id 
                          AND dct.snap_date > 
                                (  TRUNC (TO_DATE ('20080622', 'yyyymmdd'), 'dd') 
                                  - 7 
                                ) 看一下RESULT;
     FROM dmr.dm_call_yujin dcy, dm.dm_call_ticket dct 
                        WHERE dcy.service_id (+)= dct.service_id 
    看一下RESULT;
    就知道哪个地方有问题!
                         
      

  6.   

    如果把 (  TRUNC (TO_DATE ('20080622', 'yyyymmdd'), 'dd')  - 7 )这个条件去掉,因为dct这个表数据量非常大,执行一次要几个小时的!!所以...