select TEMP1.FDI_NO,TEMP1.COMP_CODE,TEMP1.DIMENSION1,TEMP1.DIMENSION2,TEMP1.FDI_DATA,TEMP2.FDI_DATA,TEMP3.FDI_DATA from  (select FDI_NO,COMP_CODE,DIMENSION1,DIMENSION2,FDI_DATA from (select 'V_TEST_2' as fdi_no from dual) ,( select 'C1340' as COMP_CODE from dual),( select  dimvalue_code as DIMENSION1 from tbdimenvaluedefine where dimension_code = 'D_INDPRIOD'),( select  dimvalue_code as DIMENSION2 from tbdimenvaluedefine where dimension_code = 'D_CXC_IND'),( select ' ' as FDI_DATA from dual))TEMP1, (select FDI_NO,COMP_CODE,DIMENSION1,DIMENSION2,SUM(FDI_DATA) as FDI_DATA from tbdimendata where FDI_NO='V_TEST_2' and COMP_CODE='C1340' Group By FDI_NO,COMP_CODE,DIMENSION1,DIMENSION2)TEMP2, (select FDI_NO,COMP_CODE,DIMENSION1,DIMENSION2,SUM(FDI_DATA) as FDI_DATA from tbdimendata where FDI_NO='V_TEST_2' and COMP_CODE='C1340' Group By FDI_NO,COMP_CODE,DIMENSION1,DIMENSION2)TEMP3 where  TEMP1.FDI_NO = TEMP2.FDI_NO(+) and TEMP1.FDI_NO = TEMP3.FDI_NO(+) and TEMP1.COMP_CODE=TEMP2.COMP_CODE(+) and  TEMP1.COMP_CODE= TEMP3.COMP_CODE(+) and TEMP1.DIMENSION1 = TEMP3.DIMENSION1(+)  and TEMP1.DIMENSION2 = TEMP2.DIMENSION2(+)  and TEMP1.DIMENSION1 = TEMP2.DIMENSION1(+)  and TEMP1.DIMENSION2 = TEMP3.DIMENSION2(+)

解决方案 »

  1.   

    一看就有个很不必要的问题,很多用dual表的子查询都是不必要的(select 'V_TEST_2' as fdi_no from dual),按你的意思直接用'V_TEST_2' as fdi_no等不就得了。
      

  2.   

    谢谢,但是这个并不影响查询结果,我生成的临时表TEMP2,TEMP3都有数,TEMP1也包含TEMP2,TEMP3记录,但是外连接没有起任何做用,TEMP2.FDI_DATA,TEMP3.FDI_DATA都返回的空值,但当我将TEMP1.DIMENSION1 = TEMP3.DIMENSION1(+)  去掉后TEMP2.FDI_DATA列查询显示有就数了。当我去掉TEMP1.DIMENSION1 = TEMP2.DIMENSION1(+)  条件后 TEMP3.FDI_DATA 列查询显示有数,请问这是怎么回事?