2016-06-23 2 views
2

У меня есть несколько SQL запросов с различными, где положения:Несколько SQL запросов с различными, где положения

select * from (
    SELECT ov.state_nm, ov.state_id,us.client_id, us.rebate_qtr_id, 
    sum(cvr.rebate_per_claim) as flagged 
    FROM [dOVT_OutlierView].[APP01DBA].[OVT_USER_STATE_ASSIGNMENT] us 
    inner join ovt_states ov on us.state_id=ov.state_id 
    inner join OVT_LABELER_CLIENT_STATE_SETTINGS css 
    on css.client_id=us.client_id and us.state_id=css.state_id 
    inner join [APP01DBA].[OVT_CLAIM_VALIDATION_ALL_RESULT] cvr 
    on us.client_id= cvr.client_id 
    and css.client_id=cvr.client_id 
    inner join [APP01DBA].[OVT_CLAIM_VALIDATION_ALL_RESULT_USER_DECISION] udes 
    on udes.client_id=cvr.client_id 
    and udes.client_id=css.client_id and us.client_id=udes.client_id 
    where us.assigned_to_user_id=81 and us.company_id=50 and us.client_id=23 

    group by ov.state_id, us.client_id,ov.state_nm,us.rebate_qtr_id) a 
    cross join (

    SELECT 
    sum(cvr.rebate_per_claim) as follwup 
    FROM [dOVT_OutlierView].[APP01DBA].[OVT_USER_STATE_ASSIGNMENT] us 
    inner join ovt_states ov on us.state_id=ov.state_id 
    inner join OVT_LABELER_CLIENT_STATE_SETTINGS css 
    on css.client_id=us.client_id and us.state_id=css.state_id 
    inner join [APP01DBA].[OVT_CLAIM_VALIDATION_ALL_RESULT] cvr 
    on us.client_id= cvr.client_id 
    and css.client_id=cvr.client_id 
    inner join [APP01DBA].[OVT_CLAIM_VALIDATION_ALL_RESULT_USER_DECISION] udes 
    on udes.client_id=cvr.client_id 
    and udes.client_id=css.client_id and us.client_id=udes.client_id 
    where us.assigned_to_user_id=81 and us.company_id=50 and us.client_id=23 
    and udes.followup_dispute_ignore_flg='F' 
    group by ov.state_id, us.client_id,ov.state_nm,us.rebate_qtr_id) b 

Эти два запросов на выборку в скобках те же, только где положение добавляется во втором запросе. Только для слияния, я добавил кросс-соединение для обоих запросов.

Есть ли другой способ сделать это без повторения запросов еще раз?

+0

выражение общей таблицы (КТР) возможно. – jarlh

+0

@jarlh не могли бы вы предоставить пример – SivaRajini

+0

использовать UNION вместо перекрестного соединения –

ответ

2

Я бы просто поместил это в выбранную часть первого запроса, удалил часть перекрестного соединения, и вы должны получить то, что вам нужно.

sum(case when udes.followup_dispute_ignore_flg='F' then cvr.rebate_per_claim else 0 end)as follwup 

так

select 
    ov.state_nm, ov.state_id, 
    us.client_id, 
    us.rebate_qtr_id, 
    sum(cvr.rebate_per_claim) as flagged, 
    -- just a new line here 
    sum(case when udes.followup_dispute_ignore_flg='F' then cvr.rebate_per_claim else 0 end)as follwup 
from [dOVT_OutlierView].[APP01DBA].[OVT_USER_STATE_ASSIGNMENT] us 
inner join ovt_states ov on us.state_id=ov.state_id 
inner join OVT_LABELER_CLIENT_STATE_SETTINGS css 
    on css.client_id=us.client_id and us.state_id=css.state_id 
inner join [APP01DBA].[OVT_CLAIM_VALIDATION_ALL_RESULT] cvr 
    on us.client_id= cvr.client_id and css.client_id=cvr.client_id 
inner join [APP01DBA].[OVT_CLAIM_VALIDATION_ALL_RESULT_USER_DECISION] udes 
    on udes.client_id=cvr.client_id and udes.client_id=css.client_id and us.client_id=udes.client_id 
where us.assigned_to_user_id=81 and us.company_id=50 and us.client_id=23 
group by ov.state_id, us.client_id,ov.state_nm,us.rebate_qtr_id 
+0

Отличное решение !!! Спасибо – SivaRajini

1

Вы могли бы сделать что-то вроде этого. Сначала создайте свой основной запрос, со всеми вашими соединениями. Затем создайте свои сводные запросы. Затем перекрестно присоедините два сводных запроса в конце.

;WITH MasterQuery 
AS (
    SELECT ov.state_nm 
     ,ov.state_id 
     ,us.client_id 
     ,us.rebate_qtr_id 
     ,cvr.rebate_per_claim 
     ,udes.followup_dispute_ignore_flg 
    FROM [dOVT_OutlierView].[APP01DBA].[OVT_USER_STATE_ASSIGNMENT] us 
    INNER JOIN ovt_states ov 
     ON us.state_id = ov.state_id 
    INNER JOIN OVT_LABELER_CLIENT_STATE_SETTINGS css 
     ON css.client_id = us.client_id 
      AND us.state_id = css.state_id 
    INNER JOIN [APP01DBA].[OVT_CLAIM_VALIDATION_ALL_RESULT] cvr 
     ON us.client_id = cvr.client_id 
      AND css.client_id = cvr.client_id 
    INNER JOIN [APP01DBA].[OVT_CLAIM_VALIDATION_ALL_RESULT_USER_DECISION] udes 
     ON udes.client_id = cvr.client_id 
      AND udes.client_id = css.client_id 
      AND us.client_id = udes.client_id 
    WHERE us.assigned_to_user_id = 81 
     AND us.company_id = 50 
     AND us.client_id = 23 
    ) 
    ,FirstSummaryQuery 
AS (
    SELECT state_nm 
     ,state_id 
     ,client_id 
     ,rebate_qtr_id 
     ,sum(cvr.rebate_per_claim) AS flagged 
    FROM MasterQuery 
    GROUP BY state_nm 
     ,state_id 
     ,client_id 
     ,rebate_qtr_id 
    ) 
    ,SeconndSummaryQuery 
AS (
    SELECT sum(rebate_per_claim) AS follwup 
    FROM MasterQuery 
    WHERE followup_dispute_ignore_flg = 'F' 
    ) 
SELECT state_nm 
    ,state_id 
    ,client_id 
    ,rebate_qtr_id 
    ,follwup 
FROM FirstSummaryQuery 
CROSS JOIN SeconndSummaryQuery 
Смежные вопросы