Sql server 2005 从sql查询中避免子查询
我有这样一个问题:Sql server 2005 从sql查询中避免子查询,sql-server-2005,Sql Server 2005,我有这样一个问题: SELECT emppayslipgenerationdetails.EMPpayslipgenerationdetailid, emppayslipgenerationdetails.MonthNumber , emppayslipgenerationdetails.YearNumber , emppayslipgenerationdetails.FinancialY
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
如何删除影响性能的子查询消除子查询的一般方法是使用join 为了证明这一点,为了消除最内部的查询,您应该尝试以下方法:
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
但是请注意,在某些情况下,这可能比子查询更昂贵