CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

如何优化该SQL语句?(个人觉的应该可以优化很多,但不会做)

楼主heraldboy(流星雨)2005-08-04 18:28:31 在 MS-SQL Server / 应用实例 提问

update   joblist   set    
   
  s1=(select   count(*)   from   conjoblist   as   a   where    
  a.SERVERLEVEL='C'   and   a.jobtype='L'   and   a.cmdopt=6    
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)    
   
  ,s2=(select   count(*)   from   conjoblist   as   a   where    
  a.SERVERLEVEL='C'   and   a.jobtype='L'   and   a.cmdopt=5   and    
  a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)    
   
  ,s3=(select   count(*)   from   conjoblist   as   a   where    
  a.SERVERLEVEL='C'   and   a.cmdopt=7    
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)    
   
  ,s4=(select   count(*)   from   conjoblist   as   a   where    
  a.SERVERLEVEL='C'   and   a.jobtype='T'   and   a.cmdopt=1   and   a.jobphase='Init'   and   a.jobstatus='Pause'    
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)  
   
  ,s5=(select   count(*)   from   conjoblist   as   a   where    
  a.SERVERLEVEL='C'   and   a.jobtype='T'   and   a.cmdopt=1   and   (a.jobstatus='OK'   or   a.jobstatus='Sent'   or   a.jobstatus='SentOK')  
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)  
   
  ,s6=(select   count(*)   from   conjoblist   as   a   where    
  SERVERLEVEL='C'   and   jobtype='T'   and   cmdopt=1   and   jobphase='Init'   and   jobstatus='Error'   and   BHG=1  
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)  
   
  ,s7=(select   count(*)   from   conjoblist   as   a   where    
  SERVERLEVEL='C'   and   jobtype='T'   and   cmdopt=2  
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)  
   
  ,s8=(select   count(*)   from   conjoblist   as   a   where    
  SERVERLEVEL='C'   and   cmdopt=0  
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)  
   
  ,s9=(select   count(*)   from   conjoblist   as   a   where    
  SERVERLEVEL='C'   and   cmdopt=2  
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)  
   
  ,s10=(select   count(*)   from   conjoblist   as   a   where    
  SERVERLEVEL='C'   and   jobstatus='Hit'   and   cmdopt=0  
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)  
   
  ,s11=(select   count(distinct   caseno)   from   conjoblist   as   a   where    
  SERVERLEVEL='C'   and   jobstatus='Hit'   and   cmdopt=5  
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0)  
   
  ,s14=(select   count(distinct   caseno)   from   conjoblist   as   a   where    
  SERVERLEVEL='C'   and   jobtype='L'   and   cmdopt=6  
  and   a.xzqh=joblist.xzqh   and   datediff(day,a.starttime,joblist.starttime)=0) 问题点数:20、回复次数:4Top

1 楼summerICEREDTEA(从基础学起)回复于 2005-08-04 20:23:18 得分 0

-.-  
  估计我也就写出这程度来  
  MARKTop

2 楼guid6(学无止境)回复于 2005-08-04 20:50:14 得分 0

可以尝试用游标或循环Top

3 楼bugchen888(臭虫)回复于 2005-08-04 21:15:25 得分 0

UPDATE   joblist  
        SET   s1   =   c.s1,  
                s2   =   c.s2,  
                s3   =   c.s3,  
                s4   =   c.s4,  
                s5   =   c.s5,  
                s6   =   c.s6,  
                s7   =   c.s7,  
                s8   =   c.s8,  
                s9   =   c.s9,  
                s10   =   c.s10,  
  s11   =   (SELECT   COUNT   (DISTINCT   caseno)  
                  FROM   conjoblist   a  
                WHERE   serverlevel   =   'C'  
                    AND   jobstatus   =   'Hit'  
                    AND   cmdopt   =   5  
                    AND   a.xzqh   =   joblist.xzqh  
                    AND   datediff   (DAY,   a.starttime,   joblist.starttime)   =   0),  
  s14   =   (SELECT   COUNT   (DISTINCT   caseno)  
                  FROM   conjoblist   a  
                WHERE   serverlevel   =   'C'  
                    AND   jobtype   =   'L'  
                    AND   cmdopt   =   6  
                    AND   a.xzqh   =   joblist.xzqh  
                    AND   datediff   (DAY,   a.starttime,   joblist.starttime)   =   0)  
  FROM   (   SELECT    
  s1   =   sum(case   when(a.jobtype   =   'L'   AND   a.cmdopt   =   6)then   1   else   0   end),  
  s2   =   sum(case   when(a.jobtype   =   'L'   AND   a.cmdopt   =   5)then   1   else   0   end),  
  s3   =   sum(case   when(a.cmdopt   =   7   then   1   else   0   end),  
  s8   =   sum(case   when(cmdopt   =   0   then   1   else   0   end),  
  s9   =   sum(case   when(cmdopt   =   2   then   1   else   0   end),  
  s7   =   sum(case   when(jobtype   =   'T'   AND   cmdopt   =   2)then   1   else   0   end),  
  s10   =   sum(case   when(jobstatus   =   'Hit'   AND   cmdopt   =   0)then   1   else   0   end),  
  s4   =   sum(case   when(a.jobtype   =   'T'  
                  AND   a.cmdopt   =   1  
                  AND   a.jobphase   =   'Init'  
                  AND   a.jobstatus   =   'Pause')then   1   else   0   end),  
  s5   =   sum(case   when(a.jobtype   =   'T'  
                  AND   a.cmdopt   =   1  
                  AND   (       a.jobstatus   =   'OK'  
                            OR   a.jobstatus   =   'Sent'  
                            OR   a.jobstatus   =   'SentOK'  
                          ))then   1   else   0   end),  
  s6   =   sum(case   when(jobtype   =   'T'  
                  AND   cmdopt   =   1  
                  AND   jobphase   =   'Init'  
                  AND   jobstatus   =   'Error'  
                  AND   bhg   =   1)then   1   else   0   end),  
  FROM   conjoblist   a  
  WHERE   a.serverlevel   =   'C'  
  AND   a.xzqh   =   joblist.xzqh  
  AND   datediff   (DAY,   a.starttime,   joblist.starttime)   =   0)   cTop

4 楼bugchen888(臭虫)回复于 2005-08-04 21:17:45 得分 0

s3   =   sum(case   when(a.cmdopt   =   7   then   1   else   0   end),  
  s8   =   sum(case   when(cmdopt   =   0   then   1   else   0   end),  
  s9   =   sum(case   when(cmdopt   =   2   then   1   else   0   end),  
   
  改为  
   
  s3   =   sum(case   when   a.cmdopt   =   7   then   1   else   0   end),  
  s8   =   sum(case   when   a.cmdopt   =   0   then   1   else   0   end),  
  s9   =   sum(case   when   a.cmdopt   =   2   then   1   else   0   end),Top

相关问题

  • 优化sql语句
  • sql语句优化
  • SQL 语句优化
  • SQL语句优化问题
  • Sql语句优化问题
  • 如何优化SQL语句?
  • sql语句优化求教。
  • sql语句优化,急!
  • SQL查询语句优化
  • 优化一个SQL语句

关键词

  • joblist
  • xzqh
  • cmdopt
  • serverlevel
  • starttime
  • jobtype
  • jobstatus
  • datediff
  • as a where
  • day

得分解答快速导航

  • 帖主:heraldboy

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo