I have the complex sub-select statement that slows down my query and also blocks other users.
select
(Case when (Select COUNT(*) from tblQuoteDetails QD where QD.QuoteGUID = a.QuoteGUID) > 1 then
(SELECT Round(Sum(dbo.tblQuoteOptions.Premium),2)
FROM dbo.tblQuotes AS Q
INNER JOIN dbo.lstQuoteStatus ON Q.QuoteStatusID = dbo.lstQuoteStatus.QuoteStatusID
INNER JOIN dbo.tblQuoteOptions ON Q.QuoteGUID = dbo.tblQuoteOptions.QuoteGUID
--INNER JOIN dbo.tblQuoteOptionPremiums ON dbo.tblQuoteOptionPremiums.QuoteOptionGuid = dbo.tblQuoteOptions.QuoteOptionGUID
WHERE (Q.ControlNo = a.ControlNo)
AND (Q.OriginalQuoteGUID IS NULL)
AND (dbo.tblQuoteOptions.Premium <> 0)
AND (DATEDIFF(d,ISNULL(null, dbo.GetEffectiveDate(Q.QuoteGUID)), dbo.GetEffectiveDate(Q.QuoteGUID)) <= 0))
Else
(SELECT Round(Avg(dbo.tblQuoteOptions.Premium),2)
FROM dbo.tblQuotes AS Q
INNER JOIN dbo.lstQuoteStatus ON Q.QuoteStatusID = dbo.lstQuoteStatus.QuoteStatusID
INNER JOIN dbo.tblQuoteOptions ON Q.QuoteGUID = dbo.tblQuoteOptions.QuoteGUID
--INNER JOIN dbo.tblQuoteOptionPremiums ON dbo.tblQuoteOptionPremiums.QuoteOptionGuid = dbo.tblQuoteOptions.QuoteOptionGUID
WHERE (Q.ControlNo = a.ControlNo)
AND (Q.OriginalQuoteGUID IS NULL)
AND (dbo.tblQuoteOptions.Premium <> 0)
AND (DATEDIFF(d,ISNULL(null, dbo.GetEffectiveDate(Q.QuoteGUID)), dbo.GetEffectiveDate(Q.QuoteGUID)) <= 0))
--GROUP BY dbo.tblQuoteOptions.QuoteOptionID
End) As QuotedPremium
FROM tblQuotes a
Not sure if I'm reading execution plan correctly but that's what I see:
Any idea what approach should I take here?
Thanks