有三个表 A 有工号p,姓名n,日期date,部门d,形体no,产量num每日工资wage 表A存放员工每日产量,并有一个初始的工资
表B有工号,姓名,日期,部门存放每日汇总后的工资(同工号同日期会有不同的形体即表A会有多条纪录,星期六按双倍算),现在要查询一定日期范围的产量和工资,
例如:
A班 20080101 001 张三 100只  30  60 
A班 20080102 001 张三 80只   25  25 
A班 20080103 001 张三 75只   24  24
                            合计:109
SELECT A.P,A.N,A.DATE,A.D,A.WAGE,B.合计 FROM A LEFT OUTER JOIN 
(SELCET P,D,DATE,SUM(WAGE) AS 合计 FROM B WHERE DATE BETWEEN 0101 AND 0103 GROUP BY P,D,DATE ) B ON A.P=B.P AND A.D=B.D
当查询的日期范围很大的时候,查询就会很慢 要得出合计的工资,左联接的B表有没有什么方法可以改善下 提高运算速度?

解决方案 »

  1.   


    /*等同于下*/
    SELECT   A.P,A.N,A.[DATE],A.D,A.WAGE,SUM(B.WAGE) AS 合计   
    FROM A LEFT OUTER JOIN B ON A.P=B.P AND A.D=B.D
    WHERE   B.[DATE]   BETWEEN  0101   AND   0103
    GROUP BY A.P,A.N,A.[DATE],A.D,A.WAGE,B.P,B.D,B.[DATE] 
      

  2.   

    group by date 的話 得到的查詢結果就是按日期來的工資
    合計的結果就不是0101 and 0103 之間的總和了                  合计
    A班   20080101   001   张三   100只     30      60       109
    A班   20080102   001   张三   80只       25     25       109
    A班   20080103   001   张三   75只       24     24       109
                                                            合计:109 
      

  3.   

    照你的方法得到結果是這樣的:A班       20080101       001       张三       100只           30           60      60         
    A班       20080102       001       张三       80只            25           25       25        
    A班       20080103       001       张三       75只            24           24        24     
    我想要的是:
    A班       20080101       001       张三       100只           30            60      109 
    A班       20080102       001       张三       80只            25            25      109 
    A班       20080103       001       张三       75只            24            24      109