2010-12-08 6 views
0

J'ai une requête comme ceci:Pour éviter la sous-requête d'une requête SQL

SELECT emppayslipgenerationdetails.EMPpayslipgenerationdetailid, 
     emppayslipgenerationdetails.MonthNumber     , 
     emppayslipgenerationdetails.YearNumber     , 
     emppayslipgenerationdetails.FinancialYearID    , 
     emppayheadvalues.PayHeadMasterID      , 
     emppayheadvalues.PayHeadValue       , 
     ISNULL(
     (SELECT SUM(EPH.PayHeadValue) AS YTD 
     FROM  emppayheadvalues EPH 
     WHERE EPH.EmppayslipgenerationdetailID<=emppayslipgenerationdetails.EMPpayslipgenerationdetailid 
     AND  EPH.PayHeadMasterID    =emppayheadvalues.PayHeadMasterID 
     AND  EmppayslipgenerationdetailID IN 
       (SELECT EmppayslipgenerationdetailID 
       FROM emppayslipgenerationdetails 
       WHERE FinancialYearID=2 
       AND  EmpNumber  ='E0012' 
       ) 
     GROUP BY PayheadMasterID 
     ) 
     ,0)AS YTD 
FROM emppayheadvalues 
     INNER JOIN emppayslipgenerationdetails 
     ON  emppayheadvalues.EMPpayslipgenerationdetailid= emppayslipgenerationdetails.EMPpayslipgenerationdetailid 
WHERE emppayslipgenerationdetails.empnumber    ='E0012' 
AND emppayslipgenerationdetails.FinancialYearID   =2 

Comment puis-je supprimer la sous-requête qui affecte les performances

Répondre

0

L'approche générale pour éliminer une sous-requête est d'utiliser rejoindre .

juste pour prouver le point - d'éliminer plus ou moins quelque chose comme la requête la plus intérieure, vous devriez essayer:

SELECT SUM(EPH.PayHeadValue) AS YTD 
    FROM  emppayheadvalues EPH 
    JOIN  emppayslipgenerationdetails 
    WHERE EPH.EmppayslipgenerationdetailID<=emppayslipgenerationdetails.EMPpayslipgenerationdetailid 
    AND  EPH.PayHeadMasterID    =emppayheadvalues.PayHeadMasterID 
    AND  EmppayslipgenerationdetailID  =emppayslipgenerationdetails.EmppayslipgenerationdetailID 
    AND  EmpNumber      ='E0012' 
    AND  emppayslipgenerationdetails.FinancialYearID=2 
    GROUP BY PayheadMasterID 

Mais sachez que cela pourrait être plus cher que dans certains cas, une sous-requête.

Questions connexes