rt
在做一个财务的系统,在总分类帐中,在数据库中是新建一个详细表好还是使用临时表获得数据好,我写了一个临时表获得数据if object_id('tempdb..#tb1') is not null 
Begin
    drop table #tb1
Endif object_id('tempdb..#tb2') is not null 
Begin
    drop table #tb2
End
select km_bh ,sum(fse) as 借方 into #tb1 from st_flz where jd='借' group by km_bhselect km_bh ,sum(fse) as 贷方 into #tb2 from st_flz where jd='贷' group by km_bhselect  distinct  tb_km.km_bh , #tb1.借方,#tb2.贷方 from tb_km left join #tb1 on tb_km.km_bh =#tb1.km_bh left join #tb2 on tb_km.km_bh =#tb2.km_bh但是我朋友说新建一个详细表好,说是获得数据方便快,因为是在表了直接select,所以应该比使用临时表快,请教一下大侠们到底哪种方法才是正确的。

解决方案 »

  1.   

    使用正式表比较难维护,用临时表耗费大量 I/O 和磁盘访问select    
      a.km_bh, 
      b.借方,
      b.贷方 
    from 
      (select distinct km_bh from tb_km) a
    left join 
      (select 
         km_bh,
         sum(fse1) as 借方,
         sum(fse2) as 贷方
       from
         (select km_bh,fse as fse1,0 as fse2 from st_flz where jd='借'
          union all
          select km_bh,0 as fse1,fse as fse2 from st_flz where jd='贷'
          ) t
        group by
          km_bh
        ) b
    on
      a.km_bh=b.km_bh