select  isnull(sum(sl),0)  as sl,isnull(sum(dkje),0) as dkje,isnull(sum(gcts),0) as gcts,hzjxsdm  from     
     (select isnull(count(hth),0) as sl,isnull(sum(-dkje),0) as dkje,isnull(sum(-gcts),0) as gcts,hzjxsdm from ht where yxbz='0' and  convert(char(6),isnull(hzqxrq,''),112)='200708' group by hzjxsdm    
   union all    
     select isnull(count(hth),0) as sl,isnull(sum(bgdkje),0) as dkje,isnull(sum(bgts),0) as gcts,jxsdm as hzjxsdm from htbgb where  convert(char(6),isnull(bgsj,''),112)='200708' group by jxsdm) a     
    group by hzjxsdm 怎么样优化这个查询。。把 union all去掉!!只要一个查询语句

解决方案 »

  1.   

    select  isnull(sum(sl),0)  as sl,isnull(sum(dkje),0) as dkje,isnull(sum(gcts),0) as gcts,hzjxsdm  from  
       
         (select isnull(count(hth),0) as sl,isnull(sum(-dkje),0) as dkje,isnull(sum(-gcts),0) as gcts,hzjxsdm from ht where yxbz='0' and  convert(char(6),isnull(hzqxrq,''),112)='200708' group by hzjxsdm  
      
       union all         select isnull(count(hth),0) as sl,isnull(sum(bgdkje),0) as dkje,isnull(sum(bgts),0) as gcts,jxsdm as hzjxsdm from htbgb where  convert(char(6),isnull(bgsj,''),112)='200708' group by jxsdm) a         group by hzjxsdm
      

  2.   

    select  isnull(sum(sl),0)  as sl,isnull(sum(dkje),0) as dkje,isnull(sum(gcts),0) as gcts,hzjxsdm  from  
       
         (
    select isnull(count(hth),0) as sl,isnull(sum(-dkje),0) as dkje,isnull(sum(-gcts),0) as gcts,hzjxsdm from ht where yxbz='0' and  convert(char(6),isnull(hzqxrq,''),112)='200708' group by hzjxsdm  
      
       union all         select isnull(count(hth),0) as sl,isnull(sum(bgdkje),0) as dkje,isnull(sum(bgts),0) as gcts,jxsdm as hzjxsdm from htbgb where  convert(char(6),isnull(bgsj,''),112)='200708' group by jxsdm
       
        ) a     
       group by hzjxsdm
      

  3.   

    两个查询组合成一个子查询,然后分组统计,没什么不好啊.再说了,union all并不影响你的速度.
      

  4.   

    这样的...我在网站调用存储过程.第一次运行正常然.第二次开始..以后运行一直是提示Microsoft OLE DB Provider for SQL Server 错误 '80040e31' 超时已过期 gl/htcx-wcdtcx.asp,行 36 
      如果把存储过程ALTER一下.第一次运行系统又是好的..以后又出现上面的提示
    !
    是什么原因啊!
      

  5.   

    你把这段sql放到查询分析器里看看执行时间是多少,并且建议把第一行的isnull去掉,因为没有起作用,sql server处理null数据最耗费时间。