2016-01-04 2 views
0

, как я могу оптимизировать этот запрос,SQL QUERY с подзапросом оптимизацией

SELECT 
mp.ProviderName 
,(SELECT count(mc.ClaimSubmissionID) FROM dbo.MST_Claim mc WHERE mc.HeaderID=mpach.HeaderID AND mc.IsActive=1) AS total_claim 
,(SELECT count(mc.ClaimSubmissionID) FROM dbo.MST_Claim mc WHERE mc.HeaderID=mpach.HeaderID AND mc.op=1) AS total_op 
,(SELECT count(mc.ClaimSubmissionID) FROM dbo.MST_Claim mc WHERE mc.HeaderID=mpach.HeaderID AND mc.ip=1) AS total_ip 

FROM dbo.MST_PriorAuthorization_Claim_Header mpach 
INNER JOIN dbo.MS_Provider mp ON mp.Provider_ID = mpach.Provider_ID 
+0

пожалуйста, покажите нам структуру таблиц, участвующих .. – catzilla

ответ

0

Вы можете изменить свой запрос, используя CASE заявление, как показано ниже

SELECT 
mp.ProviderName 
,sum(case when mc.IsActive=1 then mc.ClaimSubmissionID else 0 end) AS total_claim, 
sum(case when mc.op=1 then mc.ClaimSubmissionID else 0 end) AS total_op 
sum(case when mc.ip=1 then mc.ClaimSubmissionID else 0 end) AS total_ip 

FROM dbo.MST_PriorAuthorization_Claim_Header mpach 
INNER JOIN dbo.MS_Provider mp ON mp.Provider_ID = mpach.Provider_ID 
JOIN dbo.MST_Claim mc ON mc.HeaderID = mpach.HeaderID; 
1

Использование Суммы CASE Statements избежать всех эти подзапросов.

SELECT 
    mp.ProviderName, 
    SUM(CASE WHEN mc.IsActive=1 THEN 1 ELSE 0 END) AS total_claim, 
    SUM(CASE WHEN mc.op=1 THEN 1 ELSE 0 END) AS total_op, 
    SUM(CASE WHEN mc.ip=1 THEN 1 ELSE 0 END) AS total_ip 
FROM dbo.MST_PriorAuthorization_Claim_Header mpach 
    INNER JOIN dbo.MS_Provider mp ON mp.Provider_ID = mpach.Provider_ID 
    INNER JOIN dbo.MST_Claim mc ON mc.HeaderID=mpach.HeaderID 
+0

я попробовал это один, но моя проблема в том, что я должен использовать группу, с именем провайдера, то мой результат идет не так – eldhopark

+0

я часто использовал 'GROUP BY так. Я не понимаю, как результаты будут неправильными. Кроме того, это не было упомянуто в вашем индивидуальном вопросе. – ChrisGuest

+0

Вы должны написать новый вопрос, если предложение 'GROUP BY' дает вам неожиданные результаты. – ChrisGuest

Смежные вопросы