2016-06-23 56 views
2

我有多个SQL查询与不同的where子句:多个SQL查询where子句

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 

上述两种选择中括号查询是一样的,只是where子句在第二查询加入。仅用于合并目的,我已将交叉连接添加到两个查询中。

是否有其他方法可以在不重复查询的情况下执行此操作?

+0

公用表表达式(CTE)也许。 – 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