【发布时间】:2016-06-23 12:29:15
【问题描述】:
我有多个带有不同 where 子句的 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
上述两个括号中的select查询相同,只是第二个查询中添加了where子句。仅出于合并目的,我在两个查询中都添加了交叉连接。
有没有其他方法可以在不重复查询的情况下做到这一点?
【问题讨论】:
-
可能是公用表表达式(cte)。
-
@jarlh 你能提供例子吗
-
使用 UNION 代替交叉连接
-
如果我理解正确,您的两个查询也具有相同的
WHERE。唯一的区别是followup_dispute_ignore_flg。由于您没有在第一时间过滤那些!='F',所以您会拥有两次?CROSS JOIN将提供一个each-with-each...我感觉,这不是您真正想要的...可能值得提供更多背景...
标签: sql sql-server sql-server-2012